java - 使用Gson创建对象数组

标签 java json gson

我想将此 JSON 字符串转换为可以在 Java 中操作的对象数组。

String jsonExample = "" +
            "{"c":[{"v":"03/10/2013"},{"v":23},{"v":112}]},"+
            "{"c":[{"v":"04/10/2013"},{"v":14},{"v":232}]},"+
            "{"c":[{"v":"05/10/2013"},{"v":18},{"v":145}]},"+
            "{"c":[{"v":"06/10/2013"},{"v":22},{"v":211}]},"+
            "{"c":[{"v":"07/10/2013"},{"v":18},{"v":198}]},"+
            "{"c":[{"v":"08/10/2013"},{"v":15},{"v":215}]}";

首先,我取消转义:

String unescape = StringEscapeUtils.unescapeHtml4(jsonExample2);

然后,我尝试使用Gson,

Gson gson = new Gson();
ViewsHistoric viewHistoric = gson.fromJson(unescape, ViewsHistoric.class);

具有以下类:

    public static class ViewsHistoric {
    private List<Row> r;
    public List<Row> getR() {return r;}
    public ViewsHistoric() {}
}

public static class Row {
    private Triplet c;
    public Triplet getC() {return c;}
    public Row() {}
}

public static class Triplet {
    private String v;

    public String getV() {return v; }
    public Triplet() {}
}

但是我收到错误:

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2

实际上,在过去的几个小时内,我已经尝试了许多其他的 Gson 类组合,但没有成功。

谁能告诉我如何将 json 字符串转换为 java 对象?

最佳答案

有两件事:

  1. 您的 JSON 格式无效(即使在取消转义之后也是如此)。
  2. 您的 Triplet 类是一个对象,而不是 JSON 数组。

为了使其正常工作,我对您的代码进行了一些修改。这里有一个工作示例

public class Q24000071 {

    public static void main(String[] args) {
             //the 'r' attribute, corresponding to 'ViewsHistoric' class, was missing
        String jsonExample = "{\"r\": ["
                + "{&#34;c&#34;:[{&#34;v&#34;:&#34;03/10/2013&#34;},{&#34;v&#34;:23},{&#34;v&#34;:112}]},"
                + "{&#34;c&#34;:[{&#34;v&#34;:&#34;04/10/2013&#34;},{&#34;v&#34;:14},{&#34;v&#34;:232}]},"
                + "{&#34;c&#34;:[{&#34;v&#34;:&#34;05/10/2013&#34;},{&#34;v&#34;:18},{&#34;v&#34;:145}]},"
                + "{&#34;c&#34;:[{&#34;v&#34;:&#34;06/10/2013&#34;},{&#34;v&#34;:22},{&#34;v&#34;:211}]},"
                + "{&#34;c&#34;:[{&#34;v&#34;:&#34;07/10/2013&#34;},{&#34;v&#34;:18},{&#34;v&#34;:198}]},"
                + "{&#34;c&#34;:[{&#34;v&#34;:&#34;08/10/2013&#34;},{&#34;v&#34;:15},{&#34;v&#34;:215}]}"
                + "]}";

        String unescape = StringEscapeUtils.unescapeHtml4(jsonExample);
        System.out.println(unescape);

        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        ViewsHistoric viewHistoric = gson.fromJson(unescape,
                ViewsHistoric.class);
        System.out.println(gson.toJson(viewHistoric));
    }

    public static class ViewsHistoric {

        private List<Row> r;

        public List<Row> getR() {
            return r;
        }

        public ViewsHistoric() {
        }
    }

    public static class Row {

        // Triplet is an array in the original JSON
            // of three elements, but an array.
        private Triplet[] c;

        public Triplet[] getC() {
            return c;
        }

        public Row() {
        }
    }

    public static class Triplet {

        private String v;

        public String getV() {
            return v;
        }

        public Triplet() {
        }
    }
}

关于java - 使用Gson创建对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24000071/

相关文章:

java - 非 GPS GeoLocation API - Google 与。其他(Skyhook/Navizon/Xtify/等)

php - 如何使用 php 为 sql 服务器设置 2d Json 数组?

java - JSON Java 检查元素是 JSONArray 或 JSONObject

javascript - 如何同步两个浏览器

java - Gson解析问题,空指针异常

android - Realm 和 Retrofit2 : sending auto-managed objects

java - Firebase 查询 : how do I order by a child's child value?

java - 创建EntityManagerFactory时出错: java. lang.NoClassDefFoundError

java - 将 int 转换为 boolean 值

Java,无限循环 - 仅限 2 的倍数