前言:
json 就是键值对关系,和Map很像,两者都可以嵌套其他键值对关系或者其他数据结构。
1.举个简单 json 字符串例子
String jsonStr = "{" +
"\"list\":[\"第一条数据\",\"第二条数据\"]," +
"\"data\":[{\"url\":\"baidu.com\",\"content\":\"百度搜索引擎\"},{\"url\":\"google.com\",\"content\":\"谷歌搜索引擎\"}]," +
"\"message\":\"OK\"" +
"}";
上面字符串有三种常见 json 格式
1)message,属于最常见的键值对,属于最标准的 json 字符串;
2)list,是列表,其值属于 jsonarray 格式;
3)data,属于键值对里面嵌套键值对,其值也属于 jsonarray 格式
2.下面就对这三种格式进行解析
首先声明依赖的包(除了 org 的包,还有 ali 的 fastjson 也很好,方法不同,功能没差)
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>
贴代码
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.Set;
public class JsonAnalysis {
public static void main(String[] args){
String jsonStr = "{" +
"\"list\":[\"第一条数据\",\"第二条数据\"]," +
"\"data\":[{\"url\":\"baidu.com\",\"content\":\"百度搜索引擎\"},{\"url\":\"google.com\",\"content\":\"谷歌搜索引擎\"}]," +
"\"message\":\"OK\"" +
"}";
JSONObject jsonObject = new JSONObject(jsonStr);
//获取json对象的关键字,这个方法用于暴露未知json字符串结构
Set<String> set = jsonObject.keySet();
for(String str:set){
System.out.println("json对象关键字:"+str);
}
//解析 message
String message = jsonObject.optString("message","");//建议使用opt(如果没有关键字会把后面的值赋给message)
System.out.println("message:"+message);
//解析 list
JSONArray jsonArray = jsonObject.optJSONArray("list");
for(Object o : jsonArray){ //不能直接用String声明,会出错
System.out.println(o.toString());
}
//解析 data
JSONArray jsonArrayData = jsonObject.optJSONArray("data");//如果没有data会赋值null,用get的话会报错
for (Object o : jsonArrayData){ //需要转成JSONObject再解析
JSONObject objectToJson = (JSONObject) o;
System.out.print("url:"+objectToJson.optString("url","") + ",");
System.out.print("content:"+objectToJson.optString("content",""));
System.out.println();
}
}
}
3.输出
json对象关键字:data
json对象关键字:list
json对象关键字:message
message:OK
第一条数据
第二条数据
url:baidu.com,content:百度搜索引擎
url:google.com,content:谷歌搜索引擎
4.注意:
其中解析 data 时,因为里面嵌套的是 json 标准对象,所以要转换成 json 对象进行处理。
与君共勉,祝君进步。