如何使用Java解析Json?

时间:2015-03-02 09:18:35

标签: java arrays json

我想解析java中的json对象.json文件是{"l1":"1","l2":"0","f1":"0","connected":"0","all":"0"} 我正在尝试编写一个java程序在json上面打印

l1=1
l2=0
f1=0
connected=0
all=0

json文件中的条目数可以增加,所以我必须遍历json并打印所有数据。这就是我到目前为止所做的。

public class main {
    public static void main(String[] args){
        try{
            URL url = new URL("http://localhost/switch.json");
            JSONTokener tokener = new JSONTokener(url.openStream());
            JSONObject root = new JSONObject(tokener);
            JSONArray jsonArray = root.names();
            if (jsonArray != null) { 
               int len = jsonArray.length();
               for (int i=0;i<len;i++){ 
                  System.out.println(jsonArray.get(i).toString());
               } 
            }   
        }catch (Exception e) {
            e.printStackTrace();
            System.out.println("Error Occured");
        }
    }
}

上述程序只能打印每个数组的第一项。但我正在尝试获得我在开始时提到的结果。有人可以帮忙??

2 个答案:

答案 0 :(得分:4)

这是简单的JSON对象,不是数组。您需要遍历键并打印数据:

    JSONObject root = new JSONObject(tokener);
    Iterator<?> keys = root.keys();

    while(keys.hasNext()){
        String key = (String)keys.next();
        System.out.println(key + "=" + root.getString(key));
    }

请注意,由于在内部使用HashMap,上述解决方案会以随机顺序打印密钥。请参阅描述此行为的this SO question

答案 1 :(得分:4)

您的JSON文件不包含数组 - 它包含一个对象。

JSON数组包含在[]括号中; JSON对象包含在{}括号中。

[1, 2, 3]                     // array
{ one:1, two:2, three:3 }     // object

您的代码当前从此对象中提取名称,然后打印出来:

JSONObject root = new JSONObject(tokener);
JSONArray jsonArray = root.names();

您需要使用名称(键)从对象中提取每个值,而不是仅仅遍历名称:

JSONObject root = new JSONObject(tokener);
for (Iterator<?> keys= root.keys(); keys.hasNext();){
  System.out.println(key + "=" + root.get(keys.next()));
}

请注意,这些条目不会以任何特定顺序打印出来,因为JSON objects未订购:

  

对象是一组无序的名称/值对 - http://json.org/

另请参阅JSONObject类的documentation