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