Search code examples
javajsonjson-simple

JSON parsing using JSON-Simple not working


I'm having an issue trying to parse a string using json-simple, this is the sample string:

{
 "items": [
  {
   "id": "uy0nALQEAM4",
   "kind": "youtube#video",
   "etag": "\"g-RLCMLrfPIk8n3AxYYPPliWWoo/x3SYRGDdvDsN5QOd7AYVzGOJQlM\"",
   "status": {
    "uploadStatus": "processed",
    "privacyStatus": "public",
    "license": "youtube",
    "embeddable": true,
    "publicStatsViewable": true
   }
  }
 ]
}

This is my code:

JSONParser parser = new JSONParser();
Object obj = parser.parse(result);
JSONObject jsonObject = (JSONObject) obj;

System.out.println("privacyStatus: "
                    + (String) jsonObject.get("items[0].status.privacyStatus")
                    + "\nembeddable: "
                    + (String) jsonObject.get("items[0].status.embeddable")
                    + "\npublicStatsViewable: "
                    + (String) jsonObject.get("items[0].status.publicStatsViewable"));

The output is:

privacyStatus: null
embeddable: null
publicStatsViewable: null

What stupid mistake am I making?


Solution

  • I guess it's a library limitation to solve it in a clean way. I found minimal library: https://github.com/ralfstx/minimal-json

    Which is very nice and clean. Then did the following to do what I wanted:

    JsonObject jsonObject = JsonObject.readFrom(result.toString())
              .get("items").asArray().get(0).asObject().get("status").asObject();
    

    Then I can do:

    boolean isPublic = jsonObject.get("privacyStatus").asString().equals("public");
    boolean isEmbbedable = jsonObject.get("embeddable").asBoolean();