gpt4 book ai didi

java - 如何使用 Jackson 读取单个 JSON 字段

转载 作者:搜寻专家 更新时间:2023-10-31 08:18:55 24 4
gpt4 key购买 nike

我有一个相当大的 JSON 响应,其中我对单个字段感兴趣 - status:

{
"title": "Some title",
"status": "pending",
"data": {
...
},
"meta": {
...
}
}

我需要做的就是将 JSON 响应的 status 值读取为字符串。我宁愿不必构建 POJO 来对其建模,因为在我的应用程序中,我只需要将 JSON 存储在数据库中的特定状态或丢弃它。

该应用程序已经将 Jackson 用于其他更复杂的情况,因此我更愿意坚持使用该库。到目前为止,我发现的所有示例都尝试将 JSON 映射到对象。

最佳答案

如果json响应不是很大,你可以使用ObjectMapper.readTree将完​​整的json反序列化为JsonNode并获取其中的特定属性。

例如:

ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(json);
JsonNode statusNode = jsonNode.get("status");
String statusValue = statusNode.textValue();

您还可以通过 other answer 中建议的 ObjectMapper.readValue 将完整的 json 反序列化为 ObjectNode .

如果 json 响应很大并且反序列化完整的 json 是一个问题,您可以考虑使用 Jackson Streaming API JsonParser 来解析 json。

示例如下:

String statusValue = null;

JsonFactory jsonFactory = new JsonFactory();
try (JsonParser parser = jsonFactory.createParser(json)) {
JsonToken startToken = parser.nextToken();
while (parser.nextToken() != JsonToken.END_OBJECT) {
String fieldName = parser.getCurrentName();
if ("status".equals(fieldName)) {
if (parser.nextToken() == JsonToken.VALUE_STRING) {
statusValue = parser.getValueAsString();
break;
}
} else {
parser.skipChildren();
}
}
}

JsonParser 将 json 分解为一系列标记,您可以逐个迭代这些标记。在示例中,JsonParser.skipChildren 用于跳过完整的对象或数组,以便仅检查 json 层次结构的第一级。

关于java - 如何使用 Jackson 读取单个 JSON 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38732849/

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