1

GSONを使用して、いくつか質問があります。後で使用できるJSONオブジェクトを提供できるライブラリという点では、GSONは私が探しているものではないかもしれないと感じています。

データベースからデータを読み取って、後で使用するjsonオブジェクトにデータを入力しています。jsonオブジェクトの出力は、親と子を含む以下のjsonのようになります。それは小さなツリーベースの構造を形成します:

var json = { 
         id: "1", 
         name: "Joe Smith", 
         data: { 
         "email": "",
         "phone": "123-123-1233"},
         children: [{
                        id: "Tim Anderson",
                        name: "Tim Anderson",
                        data: { 
                             "email": "x@gmail.com",
                             "phone": "123-123-1233"
                        },
                        children: []
                    },{
                        id: "Christopher Johnson",
                        name: "Christopher Johnson",
                        data: {  
                             "email": "x@gmail.com",
                             "phone": "123-123-1233"
                        },
                        children: []
                    },{
                        id: "Kate Green",
                        name: "Kate Green",
                        data: {

                        },
                        children: [{
                            id: "Gary Jones",
                            name: "Gary Jones",
                            data: {},
                            children: []
                        }, {
                            id: "Melissa Brand",
                            name: "Melissa Brand",
                            data: {},
                            children: []
                        }]
                    }
                    ] 
    }

上記の構造と同様に、このタイプの階層を持つJSONにシリアル化できるGSONオブジェクトを作成するにはどうすればよいですか?マップやその他のコレクションを使用してみましたが、希望する結果を得るのに苦労しています。したがって、GSONがJSONシリアル化に本当に必要なものであるかどうかを尋ねる理由。

4

2 に答える 2

2

デフォルトのJavaJSONTokenerおよび他の同様のパーサーを試しましたか?

      BufferedReader reader = new BufferedReader(new FileReader("jsonfile.json"));
     StringBuilder builder=new StringBuilder();
     for(String line=null;(line = reader.readLine()) != null;){
     builder.append(line).append("\n");
     }
    JSONTokener jsonTokener=new JSONTokener(builder.toString());
    JSONObject finalJson=new JSONObject(jsonTokener);

あなたの場合、内部の階層で追加のデータを見つけたい場合は、次のように繰り返します

 JSONArray children=finalJson.getJSONArray("children");
 for(int i = 0;i<children.length;i++){
 JSONObject childRecData = children.getJSONObject(i); //returns the ith JSONObject containing id, name, data, etc.
 int id = childRecData.getString();
 String name = childRecData.getString();
 JSONObject data = childRecData.getJSONObject(0);
 }

HTTPデータベースなどのより大きなJSONファイル(階層のレベルがばかげているファイル)の場合、Nishantによって提案されたGSONのPOJO(Plain Old Java Objects)モデルが推奨されます。

詳細はこちら

ここに同様の質問がありました

于 2012-06-25T18:13:58.107 に答える
1

ヒントをあげましょう

このようなPersonとDataクラス(POJO)を作成します

Person
  String id
  String name
  Data data
  List<Person> children

Data
  String email
  String phone
于 2012-06-25T17:54:47.653 に答える