我有一个简单的 JSON 字符串,格式为:
{
"obj_1": {
"k1": "v1",
"k2": "v2",
"k3": "v3"
},
"obj_2": {
"k1": "v1",
"k2": "v2",
"k3": "v3"
}
}
还有一个类来表示每个 JSON 对象,如下所示:
public class SomeObject {
public int k1;
public String k2;
public String k3;
public Constructor(int k1, String k2, String k3) {
this.k1 = k1;
this.k2 = k2;
this.k3 = k3;
}
我想将 JSON 对象读入这些对象的数组中,而不必使用 while 循环进行循环,因为这需要很长时间。
JSONObject jsonObject = new JSONObject(jsonString);
SomeObject[] objectsList = gson.fromJson(jsonObject.toString(), SomeObject[].class);
主要思想是将每个 JSON 对象填充到 Java 类中,然后填充到 SomeObject 数组中。这样,在数组中,我将可以访问每个对象并使用方法访问属性。
我最终收到一条错误消息:
can't make objects of type SomeObject[]
最佳答案
您的输入字符串应如下所示,以符合 SomeObject 列表的条件
{
[{
"k1": 1,
"k2": "v2",
"k3": "v3"
}, {
"k1": 2,
"k2": "v2",
"k3": "v3"
}
]
}
下面的代码应该可以工作..
JSONObject jsonObject = new JSONObject(jsonString);
SomeObject[] objectsList = gson.fromJson(jsonObject.toString(), SomeObject[].class);
对于此处给定的 JSON 字符串,您可以通过这种方式处理(将 toString()
添加到 SomeObject
以显示它)...
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class TestClass {
public static void main(String[] args) {
List<SomeObject> list = new LinkedList<SomeObject>();
String jsonString = "{\"obj_1\":{\"k1\":1,\"k2\":\"v2\",\"k3\":\"v3\"},\"obj_2\":{\"k1\":2,\"k2\":\"v2\",\"k3\":\"v3\"}}";
Gson gson = new Gson();
JsonObject jsonObject = new JsonParser().parse(jsonString).getAsJsonObject();
for (Entry<String, JsonElement> entry : jsonObject.entrySet()) {
// note entry.getKey() will be obj_1, obj_2, etc.
SomeObject item = gson.fromJson(entry.getValue().getAsJsonObject(), SomeObject.class);
list.add(item);
}
System.out.println(list);
}
}
示例运行
[SomeObject [k1=1, k2=v2, k3=v3], SomeObject [k1=2, k2=v2, k3=v3]]
注意: k1 的值必须是数字且不带引号,因为 k1 在 SomeObject 中声明为 int
关于java - 将 JSON 字符串转换为 Java 对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48237428/