gpt4 book ai didi

java - 如何在 Java 中转换以数字作为字段键的 json 对象?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:34:27 25 4
gpt4 key购买 nike

我正在使用的服务器返回一个 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 看起来很奇怪。如果你不能改变它,你必须将它反序列化为 Map。示例源代码可能如下所示:

import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

public class GsonProgram {

public static void main(String... args) throws Exception {
Gson gson = new GsonBuilder().create();
String json = "{\"1\":{\"id\":\"1\",\"value\":\"something\"},\"2\":{\"id\":\"2\",\"value\":\"some other thing\"}}";

Type type = new TypeToken<HashMap<String, HashMap<String, String>>>() {}.getType();
Map<String, Map<String, String>> map = gson.fromJson(json, type);
for (Map<String, String> data : map.values()) {
System.out.println(Data.fromMap(data));
}
}
}

class Data {

private int id;
private String value;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

@Override
public String toString() {
return "Data [id=" + id + ", value=" + value + "]";
}

public static Data fromMap(Map<String, String> properties) {
Data data = new Data();
data.setId(new Integer(properties.get("id")));
data.setValue(properties.get("value"));

return data;
}
}

以上程序打印:

Data [id=2, value=some other thing]
Data [id=1, value=something]

关于java - 如何在 Java 中转换以数字作为字段键的 json 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17824674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com