在没有JSON结构的java中解析嵌套JSON?

时间:2015-10-29 05:54:44

标签: java json parsing json-patch

我正在尝试解析嵌套的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}

4 个答案:

答案 0 :(得分:2)

请参阅this

示例代码

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

Jar

Maven

Refer hew for more details.

答案 1 :(得分:2)

将所有键和相应值存储到地图中的迭代解决方案。注意,不处理所有异常情况。

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()));
    }
}

答案 2 :(得分:0)

您可以使用http://json-lib.sourceforge.net/apidocs/net/sf/json/package-summary.html来解析JSON。使用JSONSerializer,您可以获取解析字符串的JSONObject。然后JSONObject中可用的方法将为您提供所有键和值。值可以像String / Long / Boolean一样简单,也可以像另一个JSONObject / JSONArray那样复杂。

答案 3 :(得分:0)

这是解决方案..

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;
    }