在JAVA中解析无根JSON

在JAVA中解析无根JSON,java,json,Java,Json,我有一些类似于: {"created_at":"2014","name":"solicitice"} {"created_at":"2015","name":"hior"} 我正在尝试以下代码以获取所有变量的值: JSONObject jsonObj=newjsonobject(sb.toString()); for(int i=0;i

我有一些类似于:

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

我正在尝试以下代码以获取所有变量的值:

JSONObject jsonObj=newjsonobject(sb.toString());
for(int i=0;i

但它只打印了几行相同价值的内容。此外,ArrayList在这种情况下无效。

因为您应该将其定义为json数组,而不是json对象。 尝试:

JSONArray-jsonArr=newjsonarray(sb.toString());
for(int i=0;i
很少更正

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\”,“姓名\:“请求\”}\n{\'创建时间\“:“2015\”,“姓名\:“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
,并将其在
字段创建的
打印到标准输出。

是否有错误?还提供了一个失败的示例。提供的示例不是有效的JSON。应该包含在
[]
中,并用逗号分隔。@X.L.Ant也许它们的输入不是一个JSON数组,而是一个由换行符分隔的JSON对象列表?@flashdrive2049为什么不呢?但在这种情况下,JsonParser将无法立即解析它。在逐个解析对象之前,必须将对象拆分为一个数组。@X.L.Ant这就是为什么我建议在我的答案中使用
StringReader
BufferedReader
包装。如果@Aquarius24添加到他们问题中的两行是他们的实际输入,这将导致错误。JSON数组由一个开始的括号
[
定义,后跟任意数量的值,这些值由逗号
和结束的括号
]
分隔。这取决于您使用的JSON库。顺便说一句,库是什么?我使用的是import org.json.JSONArray;导入org.json.JSONObject;
    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"));


    }
2014
2015
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();
}
    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"));


    }