0

次の方法で構築された複雑なオブジェクトを含むサーバー応答を取得します。

json array of object type A with
           { jsonobject with a json array of object type B
                 }

以下の例のように、オブジェクト typeA とオブジェクト typeB に逆シリアル化しようとしています。

public class ObjectA{
   String a;
   int b;
   ArrayList<ObjectB> list;
}

public class ObjectB{
   String a1;
   int b2;
   String c3;
}

これは私のJSONの例です

[
   {
      "a": "a",
      "b": 1,
      "list": [
         {
            "a1": "a1",
            "b2": 2,
            "c3": "c3"
         },
         {
            "a1": "a1",
            "b2": 2,
            "c3": "c3"
         }
      ]
   },
   {
      "a": "a",
      "b": 1,
      "list": [
         {
            "a1": "a1",
            "b2": 2,
            "c3": "c3"
         },
         {
            "a1": "a1",
            "b2": 2,
            "c3": "c3"
         }
      ]
   }
]

これを逆シリアル化するにはどうすればよいですか?

4

3 に答える 3

2

すでにクラス階層があるので、それを利用して Gson にすべての作業を任せることができます。私が言いたいことをよりよく説明するために、すぐに実行できるコードを用意しました。

package stackoverflow.questions.q18123430;

import java.lang.reflect.Type;
import java.util.*;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class Q18123430 {

    public static class ObjectA {
        String a;
        int b;
        ArrayList<ObjectB> list;

        @Override
        public String toString() {
            return "ObjectA [a=" + a + ", b=" + b + ", list=" + list + "]";
        }

    }

    public static class ObjectB {
        String a1;
        int b2;
        String c3;

        @Override
        public String toString() {
            return "ObjectB [a1=" + a1 + ", b2=" + b2 + ", c3=" + c3 + "]";
        }

    }

    public static void main(String[] args) {
        String json = "[{  a:\"a\",b:1,list:  [{a1:\"a1\",b2:2,c3:\"c3\"},{a1:\"a1\",b2:2,c3:\"c3\"}]}, {  a:\"a\",b:1,list:  [{a1:\"a1\",b2:2,c3:\"c3\"},{a1:\"a1\",b2:2,c3:\"c3\"}]}]";
        Type listOfObjectA = new TypeToken<List<ObjectA>>() {
        }.getType();

        Gson g = new Gson();
        ArrayList<ObjectA> result = g.fromJson(json, listOfObjectA);
        System.out.println(result);

    }

}

これが私の実行結果です:

[ObjectA [a=a, b=1, list=[ObjectB [a1=a1, b2=2, c3=c3], ObjectB [a1=a1, b2=2, c3=c3]]], ObjectA [a=a, b=1, list=[ObjectB [a1=a1, b2=2, c3=c3], ObjectB [a1=a1, b2=2, c3=c3]]]]
于 2013-11-13T23:11:09.537 に答える
1

以下のように、Gsonライブラリを1行で使用してJavaでデシリアライズできます

String jsonInputStr = "your json string";

Gson gson = new Gson();
List<ObjectA> objectList = gson.fromJson(jsonInputStr, new TypeToken<List<ObjectA>>(){}.getType());
于 2014-01-30T11:49:58.653 に答える
1
JSONArray jsArray = new JSONArray(); //This is your outer most JSONARRAY
for(int i=0;i<jsArray.length;i++)
{
     JSONObject innerJsonObj = jsArray.getJSONObject(i);//this is your inner jsonobject
     Log.v("a",innserJsonObj.getString("a"));
     Log.v("b",innserJsonObj.getString("b"));
     Log.v("list",innserJsonObj.getString("list")); // you have to use another loop to deal with this json array
     //to generate json array you can use:
     JSONArray innerJsonArray = new JSONArray(innserJsonObj.getString("list"));
}
于 2013-08-08T10:50:19.977 に答える