无法使用jackson json流解析json数组

时间:2013-03-28 08:29:12

标签: android json jackson arrays

我无法解析包含对象数组的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解析器以提高效率。

2 个答案:

答案 0 :(得分: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 */

答案 1 :(得分:0)