问题
I am attempting to parse below json to java object. I cannnot able to parse to combined keys and values.
"txn": {
"TXN_TYPE": {
"=": "SB"
},
"TXN_DATE(0)": {
"=": "0170501"
},
"TXN_DATE(1)": {
"=": "0170502"
},
"TXN_DATE(2)": {
"=": "0170503"
},
"TXN_AMT(0)": {
"=": "10.00"
}
"TXN_AMT(1)": {
"=": "20.00"
}
"TXN_AMT(2)": {
"=": "30.00"
}
}
i am using org.json.JSONObject to parse and iterate over it and store it in HashMap.
JSONObject txn= jObject.getJSONObject("txn");
if (txn!= null) {
Map<String,String> map = new HashMap<String,String>();
Iterator iter = txn.keys();
while(iter.hasNext()){
String key = (String)iter.next();
JSONObject valueObj = txn.getJSONObject(key);
String value = valueObj.getString("=");
System.out.println("Response : Key : "+key+ " Value : "+value);
map.put(key,value);
}
}
I need to convert this as map like below format
key : TXN_TYPE , value : SB
key : TXN_DATE , value : {Key : 0, Value : 0170501} and so on
key : TXN_AMT , value : {Key : 0, Value : 10.00} and so on
Please provide some suggestion.
回答1:
You can try something like this:
JSONObject txn = jObject.getJSONObject("txn");
if (txn != null) {
Map<String, Object> map = new HashMap<String, Object>();
Iterator iter = txn.keys();
while (iter.hasNext()) {
String key = (String) iter.next();
JSONObject valueObj = txn.getJSONObject(key);
String value = valueObj.getString("=");
String[] keyParams = key.split("[\\(\\)]");
if (keyParams.length > 1) { // it means it contains index
// checking for old map
Map<String, String> innerMap = (Map<String, String>) map.get(keyParams[0]);
if (innerMap == null) {
innerMap = new HashMap<String, String>();
}
innerMap.put(keyParams[1], value);
map.put(keyParams[0], innerMap);
} else {
map.put(key, value);
}
}
}
来源:https://stackoverflow.com/questions/43732552/parsing-json-to-hashmap-with-dynamic-keys