2011-12-26 81 views
0

我正在使用JSON库在黑莓周围漂浮,并在“How to parse the JSON response in Blackberry/J2ME?”中跟随此答案。使用Blackberry JSON解析器,如何解析出字符串“[”?

我遇到的问题是我收到一个错误,说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

给JSON数据的例子,但是一个JSON输入开始'['是一个数组,而不是一个对象 – fge 2011-12-26 22:39:31

+0

请检查一次http://docs.blackberry.com/en/developers/deliverables/21128 /Code_sample_Parse_JSON_data_structure_1319797_11.jsp – 2011-12-27 05:19:52

回答

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; 
0

如果你知道它已经开始与“[”和“]”结束,那么你可以检查,并采取子之间并把它交给解析器。

String myJsonString = ...; 
if(myJsonString.charAt(0) == '[' && myJsonString.charAt(myJsonString.length() - 1) == ']') { 
    realJsonParse(myJsonString.substring(1, myJsonString.length() - 1); 
}