簡體   English   中英

在不知道JSON結構的情況下在Java中解析嵌套JSON?

[英]Parsing Nested JSON in java without know structure of JSON?

我正在嘗試解析嵌套的JSON,但是我不知道JSON的格式...我想要JSON的所有鍵和值。

例:

{
    "txnSpecificData1": "11",
    "txnSpecificData2": "21",
    "merchantData": {
        "merchantSpecificData1": "111",
        "merchantSpecificData2": "222",
        "merchantSpecificData3": {
            "data1": "1",
            "data2": "2"
        }
    }
}

現在我想要所有鍵及其值...我嘗試了JSONParser,但它沒有提供所有鍵。 請有人指導我這樣做。

我需要基於密鑰的值。假設我將密鑰指定為“ merchantSpecificData2”,它應該返回我的值。

O / P應該是具有所有鍵和值的MAP:

OutPut Map : : : {txnSpecificData1=11, txnSpecificData1=22, merchantSpecificData1=111, merchantSpecificData2=222,data1=1,data2=2}

請參考這個

樣例代碼

public static void main(String[] args) throws JSONException {
        String json = "{\"txnSpecificData1\": \"11\",\"txnSpecificData2\": \"21\",\"merchantData\": {\"merchantSpecificData1\": \"111\",\"merchantSpecificData2\": \"222\",\"merchantSpecificData3\": {\"data1\": \"1\",\"data2\": \"2\"}}}";

        JSONObject jsonObject = new JSONObject(json);
        JSONObject merchantData = (JSONObject) jsonObject.get("merchantData");
        System.out.println(merchantData.get("merchantSpecificData2"));
    }

輸出量

222

馬文

有關更多詳細信息,請參見hew。

一種將所有鍵和相應值存儲到映射中的迭代解決方案。 注意,不處理所有異常情況。

public static void main(String[] args) throws Exception{
    JSONObject jo = new JSONObject(your_json_String_here);
    Map<String, String> map = new HashMap<String, String>(); 
    new Test().iterateJson(jo, map);
    System.out.println(map);
}
public void iterateJson(JSONObject jo, Map map) {
    for(Object o : jo.keySet()){
        if(jo.get(o.toString()) instanceof JSONObject) 
            iterateJson(jo.getJSONObject(o.toString()), map);
        else
            map.put(o.toString(), jo.get(o.toString()));
    }
}

您可以使用http://json-lib.sourceforge.net/apidocs/net/sf/json/package-summary.html解析JSON。 使用JSONSerializer,您可以獲取一個JSONObject來解析您的字符串。 然后,JSONObject中可用的方法將為您提供所有鍵和值。 值可以像String / Long / Boolean這樣簡單,也可以像另一個JSONObject / JSONArray這樣復雜。

這是解決方案。

private static HashMap print(final JsonNode node) throws IOException {
        HashMap map = new HashMap();
        Iterator<Map.Entry<String, JsonNode>> fieldsIterator = node.getFields();

        while (fieldsIterator.hasNext()) {
            Map.Entry<String, JsonNode> field = fieldsIterator.next();
            final String key = field.getKey();

            final JsonNode value = field.getValue();
            if (value.isContainerNode()) {
                print(value);
            } else {
                map.put(key, value);
            }
        }
        return map;
    }

暫無
暫無

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

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