使用Blackberry JSON解析器,如何从字符串中解析出“[”?

时间:2011-12-26 22:36:21

标签: blackberry

我正在使用为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":""}]

2 个答案:

答案 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);
}