Search code examples
javajsonjson-simple

How to find out if key exists or not when parsing json data


I am trying to parse json file using Java.My json file format is given below.I was trying to print a message if the action is a "note" and print performed_at. However,there is no output for the below code.

Thanks in advance for the advice and your time.Appreciate it.

 {
"data": {
    "name": "John"

},
"activities_data": [{
        "performed_at": "April",
        "id": 630,

        "action": {
            "address": "N/A",

            "issue_type": "F A"

        }
    },
    {
        "performed_at": "March",
        "id": 687,

        "action": {
            "note": {
                "id": 26519,
                "type": 4
            }
        }
    }
]
}

Java code:

    import java.io.FileReader;
    import java.io.IOException;
    import org.json.simple.JSONArray;
    import org.json.simple.JSONObject;
    import org.json.simple.parser.JSONParser;
    import org.json.simple.parser.ParseException;
    import java.io.Reader;
    import java.util.Iterator;
    import java.util.Map; 


    public class Readjsonfile {

    public static void main(String[] args) throws Exception {
        JSONParser parser = new JSONParser();
        JSONObject ticketObject = (JSONObject) parser.parse(new FileReader("activity.json"));




        JSONArray jsonArray= (JSONArray) ticketObject.get("activities_data");


        for(int i=0; i<jsonArray.size(); i++){

            Map activityobject  = ((Map)jsonArray.get(i));
            System.out.println(activityobject);
            if (activityobject.containsKey("note"))
                {  
                System.out.println("its a note");
                    \\and print performed_at here
                }
            }   

        }
    }

Solution

  • You should nest a level deeper to get the note.

    for(int i=0; i<jsonArray.size(); i++){
        Map activityobject  = ((Map)jsonArray.get(i));
        System.out.println(activityobject);
        if (activityobject.containsKey("action")) {
            Map actionObject  = ((Map)activityobject.get("action"));
            if (actionObject.containsKey("note")) {
                System.out.println("its a note");
                System.out.println("note" + actionObject.get("note"));
                System.out.println("Performed at " + activityobject.get("performed_at"));
            }
        }
    }
    

    Output

    {"performed_at":"April","action":{"address":"N\/A","issue_type":"F A"},"id":630}
    {"performed_at":"March","action":{"note":{"id":26519,"type":4}},"id":687}
    its a note
    note{"id":26519,"type":4}
    Performed at March