使用GSON获取JSON键名

11

我有一个 JSON 数组,其中包含像这样的对象:

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

我的User类有一个需要使用JSON对象的键的用户名。我该如何获取我的JSON对象的键?

现在我所拥有的是获取所有内容并创建新的User对象,但将username留空。这是可以理解的,因为我的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将"bjones"插入到newUser.username中,抱歉没有说明清楚。

3个回答

22

使用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...
}

为什么不用result.keySet()? - Zon
@Zon 是的,这样可能更好,因为我们不使用 JsonElement - Max Meijer

2

直接使用 keySet() 方法可以避免必须进行迭代:

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

0

你的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());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接