杰克逊阵列节点

Pro*_*mer 3 parsing json jackson

我有一个输入 json 对象,其中包含一个数组,如下所示:

[{"key11":"value11","key12":"value12"},
{"key21":"value21","key22":"value22"},
...
{"keyn1":"valuen1","keyn2":"valuen2"}]
Run Code Online (Sandbox Code Playgroud)

我想使用杰克逊解析器,首先,确定行数,其次,仅打印屏幕上的值。我希望它尽可能轻。有人能给我指出一个方向吗?

was*_*ren 5

假设 arow是以下简单方法中的条目之一ArrayNode可能有用。它使用抽象而不是我个人更喜欢的JsonNode一系列嵌套对象,因为提供了一系列实用方法,这些方法在处理此类数据时很有帮助(结构可能未知或非常动态的数据,因此不能被轻松转换为 POJO)。MapJsonNode

下面的测试用例说明了如何查找行数以及如何打印这些值。要获取值,JsonNode.elements()请使用该方法,而行数只需调用size()- 方法即可。

public class ArrayNodeTest {
    @Test
    public void verifySizeAndPrintRows() throws IOException {
        final String jsonStr =
                "[{\"key11\":\"value11\",\"key12\":\"value12\"},\n" +
                        "{\"key21\":\"value21\",\"key22\":\"value22\"},\n" +
                        "{\"keyn1\":\"valuen1\",\"keyn2\":\"valuen2\"}]";

        final ObjectMapper mapper = new ObjectMapper();
        final JsonNode jsonNode = mapper.readTree(jsonStr);

        // Verify size
        Assert.assertEquals(3, jsonNode.size());

        // And print rows
        for (final JsonNode row : jsonNode) {
            final Iterable<JsonNode> iterable = () -> row.elements();
            iterable.forEach(elem -> System.out.println(elem.asText()));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)