簡體   English   中英

解析可能包含JsonArray或僅包含JsonObject的Json String

[英]parse Json String which could contain a JsonArray or just a JsonObject

我的Json字符串可能是以下兩種格式之一,由於我不知道它是JsonArray還是JsonObject,因此我想知道如何解析它們。

{"a":{"a":"a","a":"a","a":"a","a":"a"}}

{"a":[{"a":"a","b":"a","a":"a","a":"a"},{"b":"b","b":"b","b":"b","b":"b"}]}

謝謝。

示例代碼使您可以解析令牌流

這被稱為初始令牌,

nextToken(t)從流中檢索下一個令牌。

parseJsonElement是遞歸的,以處理樹的性質。

public Object parseJsonElement(Token t){
    if (t.isArrayStart()){
       // is an array so create list and put child elements into list
        List list = new List();
        t = nextToken(t);
        while (!t.isArrayEnd()){
           list.add(parseJsonElement(t));
        }
        return list;
    }else if (t.isObjectStart()){
       // is an object so return parsed object
        return parseJsonElement(t);
    }else // handle something else
}

假設您正在使用Gson解析JSON,請構造一個JsonParser parse方法的返回類型為JsonElement 通過閱讀類的方法列表可以看到,它具有一些方法來告訴您它是對象,數組還是其他對象。 然后,您可以將對象放入適當的子類( JsonObjectJsonArray等)中,也可以使用提供的便捷方法為您完成此操作。

從那里,您可以檢查對象或數組並獲取屬性,元素,原始值等。這些也將以JsonElement的形式出現。

如果您使用的是JSONLib或Gson,則這兩個庫都有一個名為JsonElement的抽象類。 該類可以回答您是JsonObject還是JsonArray(#isJsonArray()#isJsonObject()方法)。 然后,您可以正確地投射它。

暫無
暫無

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

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