9

次の Json String のスニペットがあります。

 {
  "networks": {
    "tech11": {
        "id": "1",
        "name": "IDEN"
    },
    "tech12": {
        "id": "2",
        "name": "EVDO_B"
    }
 }
}

この文字列をオブジェクトに変換するには、いくつかのメソッドを使用します。

    private static Gson mGson = new Gson();

    ...

public static WebObjectResponse convertJsonToObject(String jsonString) {

    WebObjectResponse webObjectResponse = null;


    if(jsonString != null && jsonString.length() > 1){
        webObjectResponse = mGson.fromJson(jsonString, WebObjectResponse.class);
    }

    return webObjectResponse;

}

WebObjectResponse上記の文字列を表すクラスはどこにありますか。

静的フィールドを取得しても複雑ではありません。しかし、私の場合、値には異なる名前があります: tech11, tech12....

使用できます@SerializedNameが、「class」を「class_」に変換するなどの特定のケースで機能します。ご覧のとおり、オブジェクトはオブジェクトnetworksのリストとして定義されていますが、tech接尾辞が異なります。

public class WebObjectResponse{
 private DataInfoList networks = null;
} 

これは静的な実装です。2 つの値tech11を定義しtech12ましたが、次の応答はtechXX

public class DataInfoList {
 private DataInfo tech11 = null;
 private DataInfo tech12 = null;
}


public class DataInfo {
 private String id = null;
 private String name = null;
}

要素のリストもオブジェクトであり、異なる名前を持つ現在のJson文字列をオブジェクトに変換する良い方法は何ですか?

ありがとうございました。

4

3 に答える 3

7

マップを使おう!

私は次のことをします

public class WebObjectResponse {
     private Map<String, DataInfo> networks;
} 

public class DataInfo {
     private String id = null;
     private String name = null;
}

// later
Gson gson = new Gson();
String json = "{\"networks\": {\"tech11\": { \"id\": \"1\",\"name\": \"IDEN\" },  \"tech12\": { \"id\": \"2\", \"name\": \"EVDO_B\" }    }}";

WebObjectResponse response = gson.fromJson(json, WebObjectResponse .class);

json の各オブジェクトに対して、クラスのフィールドにnetworks新しいエントリが追加されます。次に、それらを参照するか、キーセットを反復処理します。MapWebObjectResponsetechXX

このような構造を想定して

{
  "networks": {
    "tech11": {
        "id": "1",
        "name": "IDEN"
    },
    "tech12": {
        "id": "2",
        "name": "EVDO_B"
    },
    "tech13": {
        "id": "3",
        "name": "WOHOO"
    }, ...
  }
}
于 2013-03-13T15:25:58.307 に答える
2

詳細については、クラス構造が必要です。

私の知る限り、どこかにいくつかのマッピングを定義し(私はxmlを使用しました)、オブジェクトを作成するためにjsonをマッピングの1つと一致させる必要があると思います。

Google gson は良いです。ジャクソンでやった

また、オブジェクトの変換は簡単なはずです。しかし、tech11tech12のような変数フィールドがある場合があるため、「ネットワーク」値を文字列として保存し、必要に応じてそこからフィールドを抽出することができます。

私が助けてくれることを願っています。

編集:Sotiiousはそれを釘付けにします。

于 2013-03-13T15:17:33.657 に答える