第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

將 JSON 解析為 Map

將 JSON 解析為 Map

呼啦一陣風(fēng) 2023-09-13 10:18:04
我正在嘗試將以下 JSON 字符串解析為鍵值對(duì),以便我可以將其插入數(shù)據(jù)庫(kù)中的表中。{    "name": "MyMobile",    "category": "cellphone",    "details": {        "displayAspectRatio": "97:3",        "audioConnector": "none",        "motherBoard": {            "Rom": "256GB",            "Ram": "8GB",            "Battery": "400mAH"        }    }}我可以使用以下代碼解析 JSON 字符串GSON并將其存儲(chǔ)到Map. 但不幸的是,它對(duì)于嵌套 JSON 對(duì)象效果不佳。public static HashMap<String, Object> createHashMapFromJsonString(String json) {JsonObject object = (JsonObject) parser.parse(json);Set<Map.Entry<String, JsonElement>> set = object.entrySet();Iterator<Map.Entry<String, JsonElement>> iterator = set.iterator();HashMap<String, Object> map = new HashMap<String, Object>();while (iterator.hasNext()) {    Map.Entry<String, JsonElement> entry = iterator.next();    String key = entry.getKey();    JsonElement value = entry.getValue();    if (null != value) {        if (!value.isJsonPrimitive()) {            if (value.isJsonObject()) {                map.put(key, createHashMapFromJsonString(value.toString()));            } else if (value.isJsonArray() && value.toString().contains(":")) {                List<HashMap<String, Object>> list = new ArrayList<>();                JsonArray array = value.getAsJsonArray();                if (null != array) {                    for (JsonElement element : array) {                        list.add(createHashMapFromJsonString(element.toString()));                    }                    map.put(key, list);                }            } else if (value.isJsonArray() && !value.toString().contains(":")) {                map.put(key, value.getAsJsonArray());            }        } else {            map.put(key, value.getAsString());           }       }   }   return map;  }}我希望我的地圖中有以下行。誰(shuí)能指導(dǎo)我正確的方法?name = MyMobilecategory = cellphonedetails.displayAspectRatio = 97:3details.audioConnector = nonedetails.motherBoard.Rom = 256GBdetails.motherBoard.Ram = 8GBdetails.motherBoard.Battery = 400mAH
查看完整描述

1 回答

?
12345678_0001

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

對(duì)于嵌套的 JSON,上述問(wèn)題可以通過(guò)遞歸來(lái)解決。請(qǐng)參閱下面的代碼。注意:僅處理 Map、//TODO ArrayList 和異常處理


@Test

public void testJsonToMap() {

    String data = "{\"name\":\"MyMobile\",\"category\":\"cellphone\",\"details\":{\"displayAspectRatio\":\"97:3\",\"audioConnector\":\"none\",\"motherBoard\":{\"Rom\":\"256GB\",\"Ram\":\"8GB\",\"Battery\":\"400mAH\"}}}";

    Gson gson = new GsonBuilder().create();

    Map jsonMap = gson.fromJson(data, Map.class);

    System.out.println(jsonMap);


    Sep2019JavaTest test = new Sep2019JavaTest();

    Map opMap = test.toMap(jsonMap, new HashMap<String, Object>(), "");

    System.out.println(opMap);

}


private Map toMap(Map ipMap, Map opMap, String parentKey) {

    if (ipMap != null && !ipMap.isEmpty()) {

        ipMap.forEach((k, v) -> {

            String key = parentKey.isEmpty() ? k.toString() : parentKey.concat(".").concat(k.toString());

            if (v.getClass() == LinkedTreeMap.class) {

                toMap((Map) v, opMap, key);

            } else {

                opMap.put(key, v);

            }


        });

    }

    return opMap;

}


//Output

//{details.motherBoard.Rom=256GB, details.motherBoard.Battery=400mAH, name=MyMobile, category=cellphone, details.audioConnector=none, details.motherBoard.Ram=8GB, details.displayAspectRatio=97:3}



查看完整回答
反對(duì) 回復(fù) 2023-09-13
  • 1 回答
  • 0 關(guān)注
  • 98 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)