我在解析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
我不能把它变成一个jsonobject并迭代它。我现在把它作为一个字符串。
有没有办法迭代这个?将有超过500个。
我尝试通过在它周围添加方括号使其成为一个数组,但它没有用,因为我需要用逗号分隔它们。我不能手动操纵这个,因为我从网上获取它。所以我试过这个。
jsonString = jsonString.replaceAll("}(?!,)", "},");
我添加否定逗号的原因是有时我可能在这些对象中有一个jsonobject,所以我只想在'}'前面添加逗号而不用逗号。
当我做替换时,我得到了这个错误。
Error in fetching or parsing JSON: java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 1:
}(?!,)
^
我做错了什么或者是否有一种更容易的方法来实现这一目标?
编辑: 哦,是的,我需要在java中实现这个,因为这是在Android应用程序中。
答案 0 :(得分:1)
从您发布的链接看,对象之间(以及仅在对象之间)有新行。如果那是对的,我会这样做:
String[] items = dataFromWeb.split("\n");
String asJSONArrayString = Arrays.toString(items);
JSONArray jsonArray = new JSONArray(asJSONArrayString);
这会将数据拆分为换行符,然后将它们与元素和括号之间的逗号连接在一起。
答案 1 :(得分:1)
这是一个如何使用Jackson的ObjectMapper完成你想要的东西的例子。
ObjectMapper om = new ObjectMapper();
try {
List<Object> obj = om.readValue(yourJsonString, new TypeReference<List<Object>> () { });
} catch (IOException e1) {
e1.printStackTrace();
}
现在,您将获得JSON字符串中每个对象的列表。为了更进一步,您可以为要解析的对象创建POJO。
类似的东西:
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>> () { });
希望这有帮助!
答案 2 :(得分:0)
JSONObject jObject = null;
mJsonString = downloadFileFromInternet(urlString); jObject = new JSONObject(mJsonString);
这将获得json对象。
这是从json对象获取json数组的方法:
JSONArray jsonImageArray = jObject.getJSONArray(“your string”);