web-dev-qa-db-ja.com

GSONを使用してJSONキー名を取得する

次のようなオブジェクトを含むJSON配列があります。

{
    "bjones": {
        "fname": "Betty",
        "lname": "Jones",
        "password": "ababab",
        "level": "manager"
    }
}

私のUserクラスには、JSONオブジェクトのキーを使用する必要があるユーザー名があります。 JSONオブジェクトのキーを取得するにはどうすればよいですか?

私が今持っているのは、すべてを取得して新しいUserオブジェクトを作成することですが、ユーザー名はnullのままにします。 JSONオブジェクトに「username」:「value」のキーと値のペアが含まれていないため、これは理解できます。

Gson gson = new Gson();
JsonParser p = new JsonParser();
JsonReader file = new JsonReader(new FileReader(this.filename));
JsonObject result = p.parse(file).getAsJsonObject().getAsJsonObject("bjones");
User newUser = gson.fromJson(result, User.class);

// newUser.username = null
// newUser.fname = "Betty"
// newUser.lname = "Jones"
// newUser.password = "ababab"
// newUser.level = "manager"

編集:GsonでnewUser.usernameに「bjones」を挿入しようとしています。説明が不足しているため申し訳ありません。

9
Ahmad

entrySet を使用してキーを取得します。エントリをループして、すべてのキーのユーザーを作成します。

JsonObject result = p.parse(file).getAsJsonObject();
Set<Map.Entry<String, JsonElement>> entrySet = result.entrySet();
for(Map.Entry<String, JsonElement> entry : entrySet) {
    User newUser = gson.fromJson(p.getAsJsonObject(entry.getKey()), User.class);
    newUser.username = entry.getKey();
    //code...
}
19
Max Meijer

keySet()を使用すると、反復の必要性が直接除外されます。

ArrayList<String> objectKeys =
  new ArrayList<String>(
    myJsonObject.keySet());
1
Zon

JSONはかなり単純なので、手動で並べ替える方法(文字列のマップを作成するなど)でも問題なく機能します。

複雑なJSON(ネストされた複雑なオブジェクトとJSON内の他の複雑なオブジェクトのリストが多数ある)の場合、 http://www.jsonschema2pojo.org/ などのツールを使用してJSONのPOJOを作成できます。

そしてちょうど:

final Gson gson = new Gson();

final MyJsonModel obj = gson.fromJson(response, MyJsonModel.class);

// Just access your stuff in object. Example
System.out.println(obj.getResponse().getResults().get(0).getId());
0