我试图在json下面解析为java对象。我无法解析组合键和值。
"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"
}
}
我使用org.json.JSONObject来解析并迭代它并将其存储在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);
}
}
我需要将其转换为格式如下的地图
键:TXN_TYPE,值:SB
键:TXN_DATE,值:{Key:0,Value:0170501}等等
键:TXN_AMT,值:{键:0,值:10.00}等等
请提供一些建议。
答案 0 :(得分:1)
您可以尝试这样的事情:
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);
}
}
}