Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get JSON object by one of its values in Java?

Trying to parse multi-level JSON in Java.

Having JSON input in format like this:

{"object1":["0","1", ..., "n"], 
"objects2":{
"x1":{"name":"y1","type":"z1","values":[19,20,21,22,23,24]}
"x2":{"name":"y2","type":"z2","values":[19,20,21,22,23,24]}
"x3":{"name":"y3","type":"z1","values":[19,20,21,22,23,24]}
"x4":{"name":"y4","type":"z2","values":[19,20,21,22,23,24]}
}

and need to get all objects from 2 by one of the attributes, e.g. get all objects with type = z1.

Using org.json*.

Tried to do something like this:

JSONObject GeneralSettings = new JSONObject(sb.toString()); //receiving and converting JSON;
JSONObject GeneralObjects = GeneralSettings.getJSONObject("objects2");
JSONObject p2;

JSONArray ObjectsAll = new JSONArray();

ObjectsAll = GeneralObjects.toJSONArray(GeneralObjects.names());

for (int i=0; i < GeneralObjects.length(); i++){
    p2 = ObjectsAll.getJSONObject(i);
    switch (p2.getString("type")) {
         case "z1": NewJSONArray1.put(p2); //JSON array that should contain values with type z1. 
         break;
         case "z2": NewJSONArray2.put(p2); //JSON array that should contain values with type z2. 
         default: System.out.println("error");
         break;
        }
    }
}

But getting null pointer exception and overall method seems not to be so well.

Please advise, is there any way to make it easier or, what am I doing wrong?

like image 204
dzroot Avatar asked Feb 01 '26 13:02

dzroot


1 Answers

If you're getting a NullPointerException it's most likely that you haven't initialized NewJSONArray1 and NewJSONArray2.

You didn't include their declaration, but you probably just need to do

NewJSONArray1=new JSONArray();
NewJSONArray2=new JSONArray();

before your loop.

Aside: by convention java variables should start with a lower case letter, e.g. newJSONArray1

like image 117
CupawnTae Avatar answered Feb 04 '26 07:02

CupawnTae