如何通过Java中的一个值获取JSON对象?

时间:2014-07-25 13:54:01

标签: java json arrays jsonobject org.json

尝试在Java中解析多级JSON。

以这样的格式输入JSON:

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

并且需要从2个属性中获取所有对象,例如获取type = z1的所有对象。

使用org.json *。

试图做这样的事情:

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

但是获得空指针异常和整体方法似乎并不是那么好。

请告知,有什么方法可以让它变得更容易,或者我做错了什么?

3 个答案:

答案 0 :(得分:2)

如果您收到NullPointerException,则最有可能是您尚未初始化NewJSONArray1NewJSONArray2

你没有包含他们的声明,但你可能只需要做

NewJSONArray1=new JSONArray();
NewJSONArray2=new JSONArray();
在你的循环之前

除此之外:按惯例,java变量应以小写字母开头,例如newJSONArray1

答案 1 :(得分:0)

    public static void main(String[] args) {
    String s =
            "{\"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]}" +
                    "}}";
    System.out.println(s);

    JSONObject json = new JSONObject(s);
    JSONObject object2 = json.optJSONObject("objects2");
    if (object2 == null) {
        return;
    }

    JSONArray result = new JSONArray();

    for (Object key : object2.keySet()) {
        JSONObject object = object2.getJSONObject(key.toString());

        String type = object.optString("type");
        if ("z1".equals(type)) {
            System.out.println(object.toString());
            result.put(object);
        }
    }

    System.out.println(result);
}

答案 2 :(得分:-1)

您始终可以将其转换为字符串并使用json-path: https://code.google.com/p/json-path/