java - Jackson JsonParser 获取数组 token

标签 java json parsing jackson fasterxml

我正在使用 Jackson Json Parser 从 JSON 字符串中获取值,然后将它们插入到 Java 对象中。这是我正在处理的 JSON 的一部分:

{
    "address":"aURL",
    "links":[
        "aURL",
        "aURL",
        "aURL"
    ]
}

这是我在 Java 代码中进行的操作。 net 是一个全局 ArrayList,Page 对象有一个 String 地址字段和一个 String[] 链接字段。我想从 JSON 中获取链接的 String 数组并将它们插入到 Page 对象中。虽然我可以使用 getText() 方法轻松提取地址字符串,但我想不出一种方便的方法来获取 String 数组。这是我的代码:

private static void parse(String json) throws IOException {
    JsonParser parser = new JsonFactory().createJsonParser(json);
    while (parser.nextToken() != JsonToken.END_OBJECT) {
        String tok = parser.getCurrentName();
        Page p = new Page();
        if ("address".equals(tok)) {
            parser.nextToken();
            p.setAddress(parser.getText());
        }
        if ("links".equals(tok)) {
            parser.nextToken();
            //p.setLinks(HOW TO GET STRING ARRAY)
        }
        net.add(p);
    }
}

我宁愿坚持使用我正在使用的 JsonParser 下一个方法,除非它太笨重了。

最佳答案

你可以尝试这样的事情。

private static void parse(String json) throws IOException {
    ObjectMapper objectMapper = new ObjectMapper();
    JsonParser parser = new JsonFactory().createJsonParser(json);
    while (parser.nextToken() != JsonToken.END_OBJECT) {
        String tok = parser.getCurrentName();
        Page p = new Page();
        if ("address".equals(tok)) {
            parser.nextToken();
            p.setAddress(parser.getText());
        }
        if ("links".equals(tok)) {
            parser.nextToken();
            ArrayNode node = objectMapper.readTree(parser);
            Iterator<JsonNode> iterator = node.elements();
            String[] array = new String[node.size()];
            for (int i = 0; i < node.size(); i++) {
                if (iterator.hasNext()) {
                    array[i] = iterator.next().asText();
                }
            }
            p.setLinks(array);
        }
        net.add(p);
    }
}

关于java - Jackson JsonParser 获取数组 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40183890/

相关文章:

java - 如何获取JAR文件中目录下的文件列表

java - Spring Boot 集成测试 - 如何使用单个上下文运行多个测试类?

ios - iOS swift 中的错误域=NSCocoaErrorDomain 代码=3840?

javascript - VM2022 :2 Uncaught SyntaxError: Unexpected token : on AJAX call

iphone - 在 iphone 中解析字符串 json 值?

c++ - 使用python在c++文件中查找某个函数的调用

java - 为什么添加一个空的 for 循环可以修复此代码?

java - 通过变量从 HashMap 中获取键

c# - 如何在 C# 中解析复杂的嵌套 JSON 字符串?

python - 使用Python解析XML : Keeping text within attribute while deleting tag around it