我想将此 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 对象?
最佳答案
有两件事:
- 您的 JSON 格式无效(即使在取消转义之后也是如此)。
- 您的
Triplet
类是一个对象,而不是 JSON 数组。
为了使其正常工作,我对您的代码进行了一些修改。这里有一个工作示例
public class Q24000071 {
public static void main(String[] args) {
//the 'r' attribute, corresponding to 'ViewsHistoric' class, was missing
String jsonExample = "{\"r\": ["
+ "{"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(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/