java - 将 JSON 字符串转换为 Java 对象列表

标签 java android json gson

我有一个简单的 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/

相关文章:

java - java中堆栈跟踪中的行号

c# - TID 5091中的致命信号11(SIGSEGV),代码1,故障加法器0x18

android - 在 android 中使用 "/proc/mounts"有什么限制吗

java - 使用 Java、Spring 进行基于配置文件的可切换 JSON 压缩

php - 在 slim 2 中同时支持 POST 数据和 JSON 格式的请求

java - 错误: Client does not support authentication protocol requested by server; consider upgrading MySQL client

java - 如何使用guacamole进行sftp二次开发

java - 使用 viewPager 滚动所有布局

android - 关于android中autocompletetextview的问题

php将json字符串转换为数组