如何解析没有名称的多个JSON对象

3

我遇到了一些解析JSON的问题。我的JSON格式如下:

{"blah":"blah","blah":"blah"}
{"blah":"blah","blah":"blah"}
{"blah":"blah","blah":"blah"}

这是JSON的链接: http://gerrit.aokp.co/query?format=JSON&q=status:merged&age:1d 我无法将其转换为json对象并进行迭代,目前它是一个字符串。
有没有一种方法可以迭代它?会有超过500个对象。
我尝试通过在周围添加方括号将其变成数组,但是由于需要用逗号分隔它们,所以它没有起作用。我无法手动操作它,因为我是从网络上获取它的。所以我尝试了这个。
jsonString = jsonString.replaceAll("}(?!,)", "},");

我之所以添加负逗号是因为有时候我可能在这些对象中有一个jsonobject,所以我只想在没有逗号的情况下在 '}' 前面添加逗号。
当我执行 replaceall 时,会出现以下错误。
Error in fetching or parsing JSON: java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 1:
    }(?!,)
    ^

我到底做错了什么,或者有没有更简单的方法来完成我正在寻找的功能?

编辑: 哦,是的,我需要在Java中实现这个功能,因为它是在Android应用程序中。


你尝试过 JSON.parse("你的字符串"); 吗? - Nilesh
应该返回JsonObject还是JsonArray? - Vaibhav Aggarwal
我使用 org.codehaus.jettison.json.JSONObject 并且它可以工作。将字符串传递给 JSONObject 构造函数。JSONObject 类提供了一个键的 Iterator,您可以使用它来获取值。 - JHS
Android Studio 似乎无法解析 "JSON"。 - Vaibhav Aggarwal
这些对象是否都以换行符结尾? - Ted Hopp
显示剩余2条评论
3个回答

2

以下是使用Jackson的ObjectMapper实现您想要的示例。

ObjectMapper om = new ObjectMapper();
try {
    List<Object> obj = om.readValue(yourJsonString, new TypeReference<List<Object>> () { });
} catch (IOException e1) {
    e1.printStackTrace();
}

现在您将拥有JSON字符串中每个单独对象的列表。为了更进一步,您可以为正在解析的对象创建一个POJO。
例如:
```java public class MyObject { private String property1; private int property2;
// getters and setters } ```
public class MyObject{
    private String project;
    private String branch;
}

那只是一个例子,你需要为每个JSON属性定义一个属性。
然后你可以转换为:
List<Object> obj = om.readValue(yourJsonString, new TypeReference<List<Object>> () { });

进入

List<MyObject> obj = om.readValue(yourJsonString, new TypeReference<List<MyObject>> () { });

希望这能有所帮助!

1
从您发布的链接来看,对象之间有换行符(仅在对象之间)。如果是这样,我会这样处理:
String[] items = dataFromWeb.split("\n");
String asJSONArrayString = Arrays.toString(items);
JSONArray jsonArray = new JSONArray(asJSONArrayString);

这将数据按换行符分割,然后在元素之间用逗号连接,在整个内容周围加上方括号。

2
这可能是最实用的方法。然而,最佳方法是让Web API返回一个格式良好的JSON对象数组。 - Stephen C
1
@StephenC - 我同意让Web API表现良好的观点。如果你请求JSON,它应该返回有效的JSON,而不是看起来像JSON但无法解析的垃圾。 - Ted Hopp

0

JSONObject jObject = null;

mJsonString = downloadFileFromInternet(urlString); jObject = new JSONObject(mJsonString);

这将获取到 JSON 对象。

以下是从 JSON 对象中获取 JSON 数组的方法:

JSONArray jsonImageArray = jObject.getJSONArray("your string");


是的,我知道这个,但是我无法将其转换为对象,因为有多个。 - Vaibhav Aggarwal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接