0

オブジェクトの配列を含む以下の JSON ストリームを解析できません。ここでは、簡略化のためにオブジェクトを 1 つだけ追加しました。

{
"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 に答える