我有Json喜欢:
{"created_at":"2014","name":"solicitice"}
{"created_at":"2015","name":"hior"}
.....
我正在尝试下面的代码来获取所有变量的值: ....
JSONObject jsonObj = new JSONObject(sb.toString());
for (int i = 0; i < jsonObj.length(); i++) {
System.out.println(jsonObj.get("created_at"));
}
但它只打印几行相同的值。在这种情况下,ArrayList也无效。
答案 0 :(得分:3)
如果您输入的字符串是:
"{\"created_at\":\"2014\",\"name\":\"solicitice\"}\n{\"created_at\":\"2015\",\"name\":\"hior\"}"
并且保证每行只有一个对象,您可以使用StringReader
与BufferedReader
结合来读取这些对象,然后读取它们的值。例如:
String input = "...";
try (StringReader sr = new StringReader(input); BufferedReader in = new BufferedReader(sr)) {
String line;
while ((line = in.readLine()) != null) {
JSONObject object = new JSONObject(line);
System.out.println(object.get("created_at"));
}
} catch (IOException e) {
// this should not happen but let's log it anyway
e.printStackTrace();
}
这将读取input
中的每一行,将其转换为JSONObject
并将其created_at
字段打印到标准输出。
答案 1 :(得分:2)
因为你应该把它定义为json数组,而不是json对象。 尝试:
JSONArray jsonArr = new JSONArray(sb.toString());
for (int i = 0; i < jsonArr.length(); i++) {
System.out.println(jsonArr.get(i).get("created_at"));
}
答案 2 :(得分:1)
很少更正,
1。)Json
字符串不正确,应采用数组
2.。)使用JsonArray
传递,然后循环,获取JsonObject
,然后通过键获取值。
public static void main(String[] args) throws JSONException {
String s = "[{\"created_at\":\"2014\",\"name\":\"solicitice\"},{\"created_at\":\"2015\",\"name\":\"hior\"}]";
JSONArray jsonArr = new JSONArray(s);
for (int i = 0; i < jsonArr.length(); i++) {
JSONObject jsonObj = (JSONObject) jsonArr.get(i);
System.out.println(jsonObj.get("created_at"));
}
}
<强>输出强>
2014
2015
答案 3 :(得分:1)
StringBuffer jsonStr = new StringBuffer("[{\"created_at\":\"2014\",\"name\":\"solicitice\"},{\"created_at\":\"2015\",\"name\":\"hior\"}]");
JsonParser jsonParser = new JsonParser();
JsonArray jsonArray = new JsonArray();
jsonArray = jsonParser.parse(jsonStr.toString()).getAsJsonArray();
System.out.println("JSON Array: " + jsonArray);
for(JsonElement json: jsonArray){
System.out.println("JSON ELEMENT: " + json);
System.out.println("NAME: " + json.getAsJsonObject().get("name"));
System.out.println("CREATED_AT: " + json.getAsJsonObject().get("created_at"));
}