使用Blackberry JSON解析器,如何解析出字符串“[”?
问题描述:
我正在使用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":""}]
答
如果你不能确定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;
答
如果你知道它已经开始与“[”和“]”结束,那么你可以检查,并采取子之间并把它交给解析器。
String myJsonString = ...;
if(myJsonString.charAt(0) == '[' && myJsonString.charAt(myJsonString.length() - 1) == ']') {
realJsonParse(myJsonString.substring(1, myJsonString.length() - 1);
}
给JSON数据的例子,但是一个JSON输入开始'['是一个数组,而不是一个对象 – fge 2011-12-26 22:39:31
请检查一次http://docs.blackberry.com/en/developers/deliverables/21128 /Code_sample_Parse_JSON_data_structure_1319797_11.jsp – 2011-12-27 05:19:52