我正在使用为Blackberry浮动的JSON库,并在“How to parse the JSON response in Blackberry/J2ME?”中回答这个答案。
我遇到的问题是我收到错误JSONObject has to begin with a "{"
。我的JSON字符串包含在[ ]
中,这是Web服务所做的事情。
我用于Android和iPhone的库剥离了,所以我想知道解决这个问题的最佳方法是什么?我认为我不能解析所有[ ]
,因为我认为这些用于多维JSON字符串。
编辑:
以下是一个例子:
[{"nid":"1","title":"test","image":"m0.jpg","by":"Presented by","by_name":"Inc.","summary":"..."}, {"nid":"6","title":"A","image":".jp[0.0] g","by":"Presented by","by_name":"Theatre","summary":""}]
答案 0 :(得分:0)
如果您不确定JSON数据的有效性,请使用任何JSON Validator
,例如JSONLint。
您的数据中有一些不受欢迎的字符,即[
和]
中的"image":".jp[0.0] g"
。我认为这些数据是在控制台上打印时由Eclipse
添加的。
示例中提供的数据不代表JSONObject,但它是一个数组。首先从数据构造JSONArray并进行解析。下面是一个示例代码段(带有修改过的数据集):
String strJSONData = "[{\"nid\":\"1\",\"title\":\"test\"},{\"nid\":\"6\",\"title\":\"A\"}]";
final String CONS_NID = "nid";
final String CONS_TITLE = "title";
try {
JSONArray ja = new JSONArray(strJSONData);
if (ja != null) {
JSONObject arrObj;
for (int i = 0; i < ja.length(); i++) {
arrObj = (JSONObject) ja.get(i);
if (arrObj.has(CONS_NID)) {
System.out.println("ID: " + arrObj.getString(CONS_NID));
}
if (arrObj.has(CONS_TITLE)) {
System.out.println("Title: " + arrObj.getString(CONS_TITLE));
}
}
arrObj = null;
}
ja = null;
} catch (Exception exc) {
}
strJSONData = null;
答案 1 :(得分:0)
如果你知道它是以'['和']'开头和结尾,那么你可以检查一下,然后在中间取出子串并将它交给解析器。
String myJsonString = ...;
if(myJsonString.charAt(0) == '[' && myJsonString.charAt(myJsonString.length() - 1) == ']') {
realJsonParse(myJsonString.substring(1, myJsonString.length() - 1);
}