[英]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
一種將所有鍵和相應值存儲到映射中的迭代解決方案。 注意,不處理所有異常情況。
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.