如何使用json节点解析json数组值 [英] how to parse json array value using json node

查看:148
本文介绍了如何使用json节点解析json数组值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 JsonNode ,其中包含以下JSON。在 JsonNode 对象内部是一个数组。在该数组中有三个字段,其中一个是 slaid ,是一个列表。另外两个是字符串。这是JSON。

I have a JsonNode which contains the following JSON. Inside that JsonNode object is an array. In that array there are three fields, one of which, slaid, is a list. The other two are strings. Here is the JSON.

{
    "SLA": [
        {
            "slaid": [
                "53637cc144ae8b607e089701"
            ],
            "ragindicator": "Red",
            "name": "r1"
        },
        {
            "slaid": [
                "53637d1844ae8b607e089704"
            ],
            "ragindicator": "Amber",
            "name": "a1"
        },
        {
            "slaid": [
                "53637eac44ae8b607e089706"
            ],
            "ragindicator": "Green",
            "name": "g1"
        }
    ]
}

我想解析这个值。如何解析它, slaid 的类型是 List< String> ?我尝试了一些方法,但我仍然无法找到解决方案。

I want to parse this value. How can I parse it , where slaid's type is List<String>? I have tried some ways but I am still unable to find the solution.

推荐答案

我能看到的最简单方法是创建 POJO 适合您的 JSON 的类:

The easiest way I can see is creating POJO classes which fit to your JSON:

class Slaids {

    @JsonProperty("SLA")
    private List<Slaid> slaids;

    public List<Slaid> getSlaids() {
        return slaids;
    }

    public void setSlaids(List<Slaid> slaids) {
        this.slaids = slaids;
    }

    @Override
    public String toString() {
        return slaids.toString();
    }
}

class Slaid {

    private List<String> slaid;
    private String ragindicator;
    private String name;

    public List<String> getSlaid() {
        return slaid;
    }

    public void setSlaid(List<String> slaid) {
        this.slaid = slaid;
    }

    public String getRagindicator() {
        return ragindicator;
    }

    public void setRagindicator(String ragindicator) {
        this.ragindicator = ragindicator;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Slaid [slaid=" + slaid + ", ragindicator=" + ragindicator + ", name=" + name + "]";
    }
}

简单用法:

ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.readValue(json, Slaids.class));

以上程序打印:

[Slaid [slaid=[53637cc144ae8b607e089701], ragindicator=Red, name=r1], Slaid [slaid=[53637d1844ae8b607e089704], ragindicator=Amber, name=a1], Slaid [slaid=[53637eac44ae8b607e089706], ragindicator=Green, name=g1]]

如果你想使用 JsonNode 你可以这样做:

If you want to use JsonNode you can do it in this way:

ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(json);
ArrayNode slaidsNode = (ArrayNode) rootNode.get("SLA");
Iterator<JsonNode> slaidsIterator = slaidsNode.elements();
while (slaidsIterator.hasNext()) {
    JsonNode slaidNode = slaidsIterator.next();
    System.out.println(slaidNode.get("slaid"));
    System.out.println(slaidNode.get("ragindicator"));
    System.out.println(slaidNode.get("name"));
}

以上程序打印:

["53637cc144ae8b607e089701"]
"Red"
"r1"
["53637d1844ae8b607e089704"]
"Amber"
"a1"
["53637eac44ae8b607e089706"]
"Green"
"g1"

这篇关于如何使用json节点解析json数组值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆