簡體   English   中英

將字符串轉換為 json 不起作用 java

[英]Convert string to json doesn't work java

我在將字符串轉換為 json 時遇到問題。也就是說,我的 json 字符串是:

{"serverId":2,"deviceId":736,"analysisDate":"2017-05-11T07:20:27.713Z","eventType":"Logs","eventAttributes":[{"name":"level","value":"INFO"},{"name":"type","value":"Video Blocked On"},{"name":"cameraId","value":"722"},{"name":"userId","value":"1"}]}

我的代碼:

    try {
        JSONObject object = new JSONObject(jsonString);
        JSONArray array = object.getJSONArray("eventAttributes");
        System.out.println("ARRAY: " + array);

        for (int i = 0; i < array.length(); i++) {
            JSONObject obj = new JSONObject(array.getJSONObject(i));
            System.out.println("OBJ: " + obj);

        }
    } catch (JSONException ex) {
        Exceptions.printStackTrace(ex);
    }

System.out.println 數組是:

[{"name":"level","value":"INFO"},{"name":"type","value":"Video Blocked On"},{"name":"cameraId","value":"722"},{"name":"userId","value":"1"}]

但如果我打印 obj is "{}",四次。 所以它是正確的,因為數組有 4 個元素,但為什么它是空的 object? 我正在使用 org.json。

謝謝

array.getJSONObject(i)已經返回了一個JSONObject類型的對象,你不需要將它傳遞給JSONObject類的構造函數。

簡單地寫

...
for (int i = 0; i < array.length(); i++) {
   JSONObject obj = array.getJSONObject(i);
   System.out.println("OBJ: " + obj);
}
...

您正在調用JSONObject(Object)構造函數,傳入JSONObject (數組中的元素)。 該構造函數記錄為:

使用bean getter從Object構造一個JSONObject。 它反映了對象的所有公共方法。 對於沒有參數且名稱以"get""is"開頭,后跟大寫字母的每個方法,將調用該方法,並將一個鍵和從getter方法返回的值放入新的JSONObject中。 [...]

現在JSONObject本身沒有任何適合bean getter的東西,所以你最終沒有鍵。 希望將JSONObject視為bean。

這就是您當前代碼不起作用的原因。 要修復它,只是不要調用構造函數 - 而是使用數組元素已經是JSONObject的事實:

JSONObject obj = array.getJSONObject(i);

具有該變化的輸出:

OBJ: {"name":"level","value":"INFO"}
OBJ: {"name":"type","value":"Video Blocked On"}
OBJ: {"name":"cameraId","value":"722"}
OBJ: {"name":"userId","value":"1"}

如果您考慮以下示例,您可以通過 3 種方式進行:

jsonString = {
   "name"  : "John",
   "sport" : "Soccer",
   "age"   : 25,
   "id"    : 100,
   "score" : [ 2, 1, 4, 5, 0, 1, 2, 3, 1]
}

字符串到 JSON Object 使用 GSON

Gson g = new Gson();
Player p = g.fromJson(jsonString, Player.class)

您還可以使用方法toJson()將 Java object 轉換為 JSON

String str = g.toJson(p);

JSON 字符串到 Java object 使用 JSON-Simple

JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);

字符串為 JSON - Jackson 示例

Player john = new ObjectMapper().readValue(jsonString, Player.class);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM