首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jackson JsonParser get阵列令牌

Jackson JsonParser get阵列令牌
EN

Stack Overflow用户
提问于 2016-10-21 19:10:10
回答 2查看 7K关注 0票数 2

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

代码语言:javascript
复制
{
    "address":"aURL",
    "links":[
        "aURL",
        "aURL",
        "aURL"
    ]
}

以下是我在Java代码中所做的事情。net是一个全局ArrayList,页面对象有一个字符串地址字段和一个String[]链接字段。我希望从JSON中获取链接的字符串数组,并将它们插入Page对象中。虽然我可以轻松地使用getText()方法提取地址字符串,但我无法找到一种方便的方法来获取字符串数组。下面是我的代码:

代码语言:javascript
复制
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下一种方法,除非它太笨重了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-21 21:46:11

你可以试试这样的东西。

代码语言:javascript
复制
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);
    }
}
票数 5
EN

Stack Overflow用户

发布于 2022-06-03 19:19:33

我会用这个;

代码语言:javascript
复制
if ("links".equals(tok)) {
    List<String> list = new ArrayList<>();
    parser.nextToken();
    if (parser.currentToken() == JsonToken.START_ARRAY) {
        parser.nextToken();
        while (parser.currentToken() != JsonToken.END_ARRAY) {
            list.add(parser.getText());
            parser.nextToken();
        }
    }
    p.setLinks(list.toArray(new String[list.size()]));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40183890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档