0

我无法解析下面包含对象数组的 JSON 流,这里我只添加了一个对象以进行简化。

{
"status": true,
"categories": [
    {
        "obj_cat_id": "26",
        "session_user": "212233379",
        "timestamp": "2011-10-30 04:34:53"
    }
]

}

我尝试了什么:

try {
        JsonFactory f = new JsonFactory();
        JsonParser jp = f.createJsonParser(is);
        jp.nextToken(); /* START_OBJECT */

        while (jp.nextToken() != JsonToken.END_OBJECT) {

            if ("status".equals(jp.getCurrentName())) {
                jp.nextToken(); /* VALUE_TRUE */
                status = jp.getText();
                Constants.showLog("Status", jp.getText());
            } else if ("categories".equals(jp.getCurrentName())) {

                //jp.nextToken();
                while (jp.nextToken() != JsonToken.END_ARRAY) {
                    //jp.nextToken();

                    while (jp.nextToken() != JsonToken.END_OBJECT) {

                        String namefieldOne = jp.getText();
                        Constants.showLog(TAG, namefieldOne);
                    }

                }

            } 
        }
        jp.close();

主要问题是,当我在当前令牌为 START_ARRAY 的情况下执行 jp.nextToken 时,它直接转到 END_ARRAY 并且我无法访问其对象值。

我正在使用 Jackson Streaming 解析器来提高效率。

4

1 回答 1

0

你考虑过使用GSON吗?您可以在服务器端或客户端 (Android) 使用它。将共享首选项保存为 JSON 和其他东西 :)

public class Category {
       Long obj_cat_id;
       Long session_user;
       Timestamp timestamp;

       /* Getters && Setters */
}

public class MyEntity
{
        private boolean status;
        private List<Category> categories;

        /* Getters && Setters */
}

public class Serializer
{ 
    private static Gson _gson;

    static
    {
        _gson = new Gson();
    }

    public static <T> T jsonToObject(String json, Type type)
    {
        return _gson.fromJson(json, type);
    }

    public static <T> String getJson(T object)
    {
        Type type = new TypeToken<T>()
        {}.getType();
        return _gson.toJson(object, type);
    }
}

像这样使用:

String myJsonString = "{
"status": true,
"categories": [
    {
        "obj_cat_id": "26",
        "session_user": "212233379",
        "timestamp": "2011-10-30 04:34:53"
    }
]
}";

MyEntity myEntity= Serializer.jsonToObject(myJsonString , MyEntity.class);
/* And vice-versa */
于 2013-03-28T08:50:08.450 回答