当前位置: 首页 > 面试题库 >

如何在Java中使用数字作为字段键转换json对象?

邰昀
2023-03-14
问题内容

我正在使用的服务器返回一个json对象,其中包含对象列表,而不仅仅是一个。

{
"1":{"id":"1","value":"something"},
"2":{"id":"2","value":"some other thing"}
}

我想将此json对象转换为对象数组。

我知道我可以使用Gson,并创建一个像这样的类:

public class Data {
    int id;
    String value;
}

然后使用

Data data = new Gson().fromJson(response, Data.class);

但这仅适用于json对象中的对象。 我不知道如何用数字作为键转换json对象。

或者,我需要更改服务器以响应以下内容?:

{["id":"1","value":"something"],["id":"2","value":"some other thing"]}

但是我不想更改为服务器,因为我必须更改所有客户端代码。


问题答案:

因为此json对象使用int作为字段密钥,所以在反序列化时无法指定字段密钥名称。因此,我需要首先从集合中提取值集合:

JsonParser parser = new JsonParser();
JsonObject obj = parser.parse(json).getAsJsonObject();
Set<Entry<String,JsonElement>> set = obj.entrySet();

现在,“ set”包含一组,在我的情况下是<1,{id:1,value:something}>。

因为这里的键没有用,所以我只需要值集,所以我迭代该集以提取值集。

for (Entry<String,JsonElement> j : set) {
            JsonObject value = (JsonObject) j.getValue();
            System.out.println(value.get("id"));
            System.out.println(value.get("value"));
        }

如果您拥有更复杂的结构(例如嵌套的json对象),则可以执行以下操作:

for (Entry<String,JsonElement> j : locations) {
            JsonObject location = (JsonObject) j.getValue();
            JsonObject coordinate = (JsonObject) location.get("coordinates");
            JsonObject address = (JsonObject) location.get("address");
            System.out.println(location.get("location_id"));
            System.out.println(location.get("store_name"));
            System.out.println(coordinate.get("latitude"));
            System.out.println(coordinate.get("longitude"));
            System.out.println(address.get("street_number"));
            System.out.println(address.get("street_name"));
            System.out.println(address.get("suburb"));
        }

希望能帮助到你。



 类似资料:
  • 问题内容: 我正在研究PHP的转换机制,并且在将数组转换为对象时遇到了一个奇怪的情况 据我了解,PHP属性必须使用与PHP变量相同的规则声明。也就是说,有效的变量名称以字母或下划线开头,后跟任意数量的字母,数字或下划线。但是,上面的代码产生以下输出 当您尝试访问对象中的信息时,它真正变得很奇怪。 无论如何,是否可以获得对象中var_dump报告的信息,还是只是在请求生命周期的剩余时间内被锁定了?(

  • 语境 我有控制器测试。我试图将对象UserDto转换为Json,使用的是Gson。 问题 Gson无法转换类型为LocalDate的字段生日。它向我显示错误消息:无法读取HTTP消息:org。springframework。http。转换器。HttpMessageNoteableException:JSON解析错误:意外标记(START\u对象),预期值\u字符串:预期数组或字符串。;嵌套异常为c

  • 我正在研究spring boot,我的反应与 我想将其转换为字符串列表,如。 什么是最好的方法,可以用来做同样的事情?先谢谢你。

  • 问题内容: 我从SQL查询中得到以下结果: 当前是PHP中的字符串。我知道它已经是JSON形式,有没有简单的方法可以将其转换为JSON对象? 我需要将其作为一个对象,以便可以像“ Coords”一样添加一个额外的项目/元素/对象。 问题答案: @deceze说的是正确的,看来您的JSON格式不正确,请尝试以下操作: 使用到的字符串转换成对象()或数组:http://php.net/manual/e

  • 我有这个json字符串 我想把它转换成JsonObject,因为它里面有一个json字符串,所以我必须取出JsonElement,然后使用它。问题是JsonElement“service”和“op”是字符串 我希望JsonObject像这样被转换 我尝试了新的JsonParser().parse(字符串)和新的Gson().fromJson(字符串,JsonObject.class),但没有解析。

  • 问题内容: 我从公共API接收到一个JSON对象,该对象本身具有一个转义的JSON字符串。 我如何将此属性转换为实际的JSON对象(未转义),以便使用NewtonSoft Json.NET反序列化整个响应? 问题答案: 这是我根据 Sam 的答案使用的可行解决方案: