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

标签 java json jackson

我有一个相当大的 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/

相关文章:

java - 带有颜色选择器的绘画应用程序

java - Android Studio,从内部类填充listView

java - Swing 删除游戏对象

java - 将 JsonNode 数组链接到 ArrayNode

ios - 从 json 数据值创建字典

c# - JSON Newtonsoft C# 序列化/反序列化对象列表的良好实践

android - Proguard causes 100 "can' t find referenced class"警告,忽略 springframework 和 jackson 的保留规则

java - 为什么list上stream操作时生成的map顺序不对

java - 如何使用 Jackson 获取嵌套 JsonNode 内的集合

spring-mvc - @JsonSerialize 和 JsonSerializer 的使用