天天看點

Java對json和jsonarray字元串的解析

前言:

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 對象進行處理。

與君共勉,祝君進步。