【问题标题】:Get JSON key name using GSON使用 GSON 获取 JSON 密钥名称
【发布时间】:2023-04-02 09:56:02
【问题描述】:

我有一个 JSON 数组,其中包含如下对象:

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

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

我现在拥有的是获取所有内容并创建一个新的用户对象,但将用户名保留为空。这是可以理解的,因为我的 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 中,抱歉缺乏说明

【问题讨论】:

    标签: java json gson json-deserialization


    【解决方案1】:

    使用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 是的,这可能会更好,因为我们不使用JsonElements
    【解决方案2】:

    使用keySet()直接排除了迭代的必要性:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2018-06-26
        • 2014-01-26
        • 2017-03-23
        • 1970-01-01
        • 2019-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-07
        相关资源
        最近更新 更多