我想解析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");
}
}
}
上述程序只能打印每个数组的第一项。但我正在尝试获得我在开始时提到的结果。有人可以帮忙??
答案 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。