前言:
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 對象進行處理。
與君共勉,祝君進步。