gpt4 book ai didi

java - 将 JSON 解析为 Map

转载 作者:行者123 更新时间:2023-12-02 00:06:41 25 4
gpt4 key购买 nike

我正在尝试将以下 JSON 字符串解析为键值对,以便我可以将其插入数据库中的表中。

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

我可以使用以下代码和 GSON 解析 JSON 字符串,并将其存储到 Map 中。但不幸的是,它对于嵌套 JSON 对象效果不佳。

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

我希望我的 map 中有以下行。谁能指导我正确的方法吗?

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

最佳答案

对于嵌套的 JSON,上述问题可以通过递归来解决。请参阅下面的代码。注意:仅处理 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}

关于java - 将 JSON 解析为 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58152185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com