0

Customer オブジェクトの配列で構成される JSON オブジェクトを解析しようとしています。各顧客オブジェクトには、いくつかのキーと値のペアが含まれています。

{
   "Customers": 
   [
     {
        "customer.name": "acme corp",
        "some_key": "value",
        "other_key": "other_value",
        "another_key": "another value"
     },
     {
        "customer.name": "bluechip",
        "different_key": "value",
        "foo_key": "other_value",
        "baa": "another value"
     }
   ]
}

複雑なのは、キーが事前にわからないことです。2 つ目の問題は、キーにピリオド (.) が含まれていることです。これは、キーをフィールドにマップしようとしても失敗することを意味します。

私はこれらを Customers クラスにマップしようとしています:

Customers data = new Gson().fromJson(responseStr, Customers.class);

次のようになります。

public class Customers {

    public List<Customer> Customers;

    static public class Customer {

        public List<KeyValuePair> properties;
        public class KeyValuePair {
            String key;
            Object value;
        }     
    }
}

私の問題は、JSON からこのクラスをロードすると、Customers リストに値が入力されますが、それらのプロパティが null になることです。キー名がわからないという事実に GSON を対処させるにはどうすればよいですか?

KeyValuePair クラスの代わりに Customer クラスに HashMap を配置するなど、他のさまざまなアプローチを試しました。

4

1 に答える 1

1

別のアプローチとして、JSON からキー値のマップを作成し、キーがわからないため、値を探すことができます。

    Gson gson = new Gson();
    Type mapType = new TypeToken<Map<String,List<Map<String, String>>>>() {}.getType();
    Map<String,List<Map<String, String>> >map = gson.fromJson(responseStr, mapType);
    System.out.println(map);

    Customers c = new Customers();

    c.setCustomers(map.get("Customers"));

    System.out.println(c.getCustomers());

Customers クラスを次のように変更します

public class Customers {

public List<Map<String, String>> customers;

public List<Map<String, String>> getCustomers() {
    return customers;
}

public void setCustomers(List<Map<String, String>> customers) {
    this.customers = customers;
}

}
于 2013-04-11T17:47:26.960 に答える