2

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"
        }
    ]
}

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.

3
  • 3
    Show the ways you've tried it. Commented May 6, 2014 at 16:10
  • 1
    What do you mean by "parse this value"? What do you want to do with what values? Commented May 6, 2014 at 16:30
  • I am using iterator, jsonNode.iterator() but i am getting an empty iterator Commented May 7, 2014 at 6:29

1 Answer 1

17

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 + "]";
    }
}

Simple usage:

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

Above program prints:

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

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"));
}

Above program prints:

["53637cc144ae8b607e089701"]
"Red"
"r1"
["53637d1844ae8b607e089704"]
"Amber"
"a1"
["53637eac44ae8b607e089706"]
"Green"
"g1"
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.