使用动态键将JSON解析为HashMap [英] Parsing JSON To HashMap With Dynamic Keys

查看:219
本文介绍了使用动态键将JSON解析为HashMap的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将json以下的内容解析为java对象.我无法解析为组合的键和值.

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

我正在使用org.json.JSONObject进行解析和迭代,并将其存储在HashMap中.

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

键:TXN_TYPE,值:SB

key : TXN_TYPE , value : SB

键:TXN_DATE,值:{键:0,值:0170501},依此类推

key : TXN_DATE , value : {Key : 0, Value : 0170501} and so on

键:TXN_AMT,值:{键:0,值:10.00},依此类推

key : TXN_AMT , value : {Key : 0, Value : 10.00} and so on

请提供一些建议.

推荐答案

您可以尝试执行以下操作:

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

    }
}

这篇关于使用动态键将JSON解析为HashMap的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆