gpt4 book ai didi

java - Jackson - 递归解析为 Map

转载 作者:搜寻专家 更新时间:2023-10-30 21:00:43 24 4
gpt4 key购买 nike

我正在尝试简化我的代码:我想存储键和值(所有字符串)。

我实际上使用的是 Map<String, Object>存储它。帽路Object可以是一个值 ( String ) 或一个新节点 ( Map<String, Object> )。

如何简化这段代码?递归函数会很好。

try {
JsonParser jsonParser = new JsonFactory().createJsonParser(content);

jsonParser.nextToken();
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
jsonParser.nextToken();

if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
String key = jsonParser.getCurrentName();
jsonParser.nextToken();

if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
mData.put(key, new HashMap<String, Object>());
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
String subkey = jsonParser.getCurrentName();
jsonParser.nextToken();

if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
Map<String, Object> subdata = (Map<String, Object>) mData.get(key);
subdata.put(subkey, new HashMap<String, Object>());
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
String subsubkey = jsonParser.getCurrentName();
jsonParser.nextToken();
Map<String, Object> subsubdata = (Map<String, Object>) subdata.get(subkey);
LogHelper.d("data[" + key + "][" + subkey + "][" + subsubkey + "]=" + jsonParser.getText());
subsubdata.put(subsubkey, jsonParser.getText());
}
}
else {
LogHelper.d("data[" + key + "]=" + jsonParser.getText());
mData.put(key, jsonParser.getText());
}
}
}
else {
LogHelper.d("data[" + key + "]=" + jsonParser.getText());
mData.put(key, jsonParser.getText());
}
}
}
else {
LogHelper.d("status=" + jsonParser.getText());
mStatus = jsonParser.getText();
}
}
}
catch (IllegalArgumentException e) {
error("0", "IllegalArgumentException: " + e.getMessage());
}
catch (JsonParseException e) {
error("0", "IOException: " + e.getMessage());
}
catch (IOException e) {
error("0", "IOException: " + e.getMessage());
}

最佳答案

假设您的最终目标只是将 JSON 反序列化为 Map<String, Object> ,对于 Jackson,有一种更简单的方法可以做到这一点。使用 ObjectMapper :

final String json = "{}";
final ObjectMapper mapper = new ObjectMapper();
final MapType type = mapper.getTypeFactory().constructMapType(
Map.class, String.class, Object.class);
final Map<String, Object> data = mapper.readValue(json, type);

您将需要错误处理等,但这是一个很好的起点。

关于java - Jackson - 递归解析为 Map<String, Object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13916086/

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