1

次の文字列があります。

"[{\"type\":\"string\",\"value\":\"value1\",\"field\":\"label\"},
    {\"type\":\"string\",\"value\":\"value2\",\"field\":\"address_unique\"}]"

次のようなものを呼び出すために、これを Java GSON JsonObject 配列/リストに変換したいと思います。

myJsonObjs[i].getAsJsonPrimitive("value").getAsString();

これを達成するための最短経路は何ですか?私はこのようなBeanを設定しようとしました:

public static class Filter {
    @SerializedName("type")
    private String type;
    @SerializedName("value")
    private String value;
    @SerializedName("field")
    private String field;

    //getters, setters and ctor
}

しかし、JsonParser または Gson を使用して、上記の文字列をこの Bean の配列/リストに逆シリアル化する方法が見つかりません。特に試してみた

Gson gson = new Gson();
gson.fromJson(json_string, Filter[].class);

json_string上記の文字列はどこにありますか)しかし、これは私に

IllegalStateException: Expected BEGIN_ARRAY but was STRING

ご協力ありがとうございました!

4

4 に答える 4

4

これを行う1つの方法は次のとおりです。

final String json = "[{\"type\":\"string\",\"value\":\"value1\",\"field\":\"label\"},{\"type\":\"string\",\"value\":\"value2\",\"field\":\"address_unique\"}]";
final JsonParser parser = new JsonParser();
final JsonElement rootElement = parser.parse(json);
final JsonArray values = rootElement.getAsJsonArray();
for (final JsonElement value : values) {
    final JsonObject obj = value.getAsJsonObject();
    final Filter filter = new Filter();
    filter.setType(obj.get("type"));
    filter.setValue(obj.get("value"));
    filter.setField(obj.get("field"));
}

そして、これがより自動化された方法です:

final String json = "[{\"type\":\"string\",\"value\":\"value1\",\"field\":\"label\"},{\"type\":\"string\",\"value\":\"value2\",\"field\":\"address_unique\"}]";
final TypeToken<List<Filter>> token = new TypeToken<List<Filter>>() {
};
final Gson gson = new Gson();
final List<Filter> values = gson.fromJson(json, token.getType());
于 2013-01-07T23:28:37.617 に答える
1

パースで何を試しましたか?あなたが持っているのは文字列です。2つのステップが必要です

  1. 文字列を解析して JsonArray にする
  2. JsonArray を fromJson で Java オブジェクトに変換する
于 2013-01-07T23:14:00.410 に答える
0

これは奇妙に見えますが、コードは機能するはずです...とにかく、Gensonライブラリを試すこともできます。Gson と同様の機能に加えて、他のいくつかの機能と優れたパフォーマンスがあります。

Gensonでそれを達成する方法は次のとおりです。

Genson genson = new Genson();
Filter[] filters = genson.deserialize(json, Filter[].class);

// or if you need a list
List<Filter> filters = genson.deserialize(json, new GenericType<List<Filter>>(){});
于 2013-01-08T00:38:38.777 に答える