parser - json in java github



List<class>をJSONObjectに入れてそのオブジェクトを読み取るにはどうすればいいですか? (4)

flexjsonようなJSONシリアライザ/デシリアライザを使用して変換を行うことができます。

私はjsonオブジェクトに変換してjsonオブジェクトからデータをトラバースしたいList<class>を持っています。

これが単なるlist<String>たら、私はちょうど次のようなことをすることができます:

JSONObject obj = new JSONObject();
List<String> sList = new ArrayList<String>();
sList.add("val1");
sList.add("val2");

obj.put("list", sList);

それから私は次のようにリストをたどることができます:

JSONArray jArray = obj.getJSONArray("list");
for(int ii=0; ii < jArray.size(); ii++
  System.out.println(jArray.getString(ii));

クラスを使用する際の問題は、 list<class>各クラス要素内のデータにアクセスする必要があり、JSONにエンコード/トラバースする方法がわかりません。 どんな助けでも大歓迎です。


Answer #1

getString() getJSONObject()代わりにgetJSONObject()呼び出します。 これにより、配列内のJSONオブジェクトのハンドルが得られ、そこからオブジェクトのプロパティを取得できます。

たとえば、 List<SomeClass>からSomeClassString getValue()およびsetValue(String value)持つプロパティ "value"を取得するには、次のようにします。

JSONObject obj = new JSONObject();
List<SomeClass> sList = new ArrayList<SomeClass>();

SomeClass obj1 = new SomeClass();
obj1.setValue("val1");
sList.add(obj1);

SomeClass obj2 = new SomeClass();
obj2.setValue("val2");
sList.add(obj2);

obj.put("list", sList);

JSONArray jArray = obj.getJSONArray("list");
for(int ii=0; ii < jArray.length(); ii++)
  System.out.println(jArray.getJSONObject(ii).getString("value"));

Answer #2

これは私がGoogle Gsonを使って行う方法です。 これを行う簡単な方法があるかどうかはわかりません(外部ライブラリの有無にかかわらず)。

 Type collectionType = new TypeToken<List<Class>>() {
                } // end new
                        .getType();

                String gsonString = 
                new Gson().toJson(objList, collectionType);

Answer #3

クラスが両方の文字列である2つのオブジェクトnamedobを持つDataであると仮定しよう。

最初に、リストが空であるかどうかをチェックします。 次に、リストからJSONArrayにオブジェクトを追加します

JSONArray allDataArray = new JSONArray();
List<Data> sList = new ArrayList<String>();

    //if List not empty
    if (!(sList.size() ==0)) {

        //Loop index size()
        for(int index = 0; index < sList.size(); index++) {
            JSONObject eachData = new JSONObject();
            try {
                eachData.put("name", sList.get(index).getName());
                eachData.put("dob", sList.get(index).getDob());
            } catch (JSONException e) {
                e.printStackTrace();
            }
            allDataArray.put(eachData);
        }
    } else {
        //Do something when sList is empty
    }

最後に、 JSONArrayJSONObjectに追加します。

JSONObject root = new JSONObject();
    try {
        root.put("data", allDataArray);
    } catch (JSONException e) {
        e.printStackTrace();
    }

さらに、このデータをStringとして取得することもできます。

String jsonString = root.toString();




list