在JAVA中解析没有root的JSON

时间:2015-10-26 10:04:48

标签: java json

我有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也无效。

4 个答案:

答案 0 :(得分:3)

如果您输入的字符串是:

"{\"created_at\":\"2014\",\"name\":\"solicitice\"}\n{\"created_at\":\"2015\",\"name\":\"hior\"}"

并且保证每行只有一个对象,您可以使用StringReaderBufferedReader结合来读取这些对象,然后读取它们的值。例如:

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"));


    }