【发布时间】:2019-09-09 13:31:40
【问题描述】:
我有一个JSON Data,它是一组对象,如下所示。我必须将deserialize下面给定的数据放入对象列表中
[{\"Name\": \"Initialize\", \"Library\": \"BKS\", \"Type\": \"setup\", \"Status\": \"PASS\", \"StartTime\": \"20190429 15:06:36.020\", \"EndTime\": \"20190429 15:06:39.476\", \"Environment\": \"CLC-ER\", \"ScenarioName\": \"BKS-DISVAS\", \"ElapsedTime\": 456.0},{\"Name\": \"Initialize\", \"Library\": \"BKS\", \"Type\": \"setup\", \"Status\": \"PASS\", \"StartTime\": \"20190429 15:06:36.020\", \"EndTime\": \"20190429 15:06:39.476\", \"Environment\": \"CLC-ER\", \"ScenarioName\": \"BKS-DISVAS\", \"ElapsedTime\": 456.0}]
我尝试了以下代码 sn-p,但出现以下错误。
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING
at com.google.gson.Gson.fromJson(Gson.java:822) ~[gson-2.3.1.jar:na]
at com.google.gson.Gson.fromJson(Gson.java:875) ~[gson-2.3.1.jar:na]
下面给出了我的模型类
public class KeywordDetails {
public KeywordDetails() {
}
@JsonProperty("Name")
public String Name;
@JsonProperty("Type")
public String Type;
@JsonProperty("Library")
public String Library;
@JsonProperty("StartTime")
public String StartTime;
@JsonProperty("EndTime")
public String EndTime;
@JsonProperty("Status")
public String Status;
@JsonProperty("ScenarioName")
public String ScenarioName;
@JsonProperty("Environment")
public String Environment;
@JsonProperty("ElapsedTime")
public double ElapsedTime;
}
反序列化代码如下,
Gson serializer = new Gson();
Type listType = new TypeToken<ArrayList<KeywordDetails>>() {
}.getType();
JsonParser parser = new JsonParser();
JsonElement kwJson = parser.parse(ser.getKeywordStats());
System.out.println(kwJson);
List<KeywordDetails> keywordDetails = serializer.fromJson(kwJson, listType);
ser.getKeywordStats() 方法是给上面的JSON。
我应该能够将deserialize 和JSON 放入对象列表或数组中。
由于我是 Java 新手,我无法找到此问题的根本原因或解决方法,谁能帮助我解决此问题?
【问题讨论】:
-
我一直在谷歌搜索,找到了一种使用默认构造函数而不带任何参数的解决方案,我也添加了那个,但即使那样也无法反序列化。
-
我也尝试将 JSON 字符串传递给 fromJson 方法,但它也不起作用。我在 Spring Boot 应用程序中使用它,还尝试了
Jackson序列化程序,但也无法重现。 -
你试过用 List 代替 ArrayList 吗?
-
您传递的实际字符串是否包含所有转义反斜杠?因为您粘贴的字符串不是有效的 JSON。它必须没有 \
-
我实际上是在将数据从 python 源发送到 java,在那里它碰巧对值进行了双重 json 编码。我不得不修复 python 代码,因为它导致 json 在内部被视为字符串,即使在解析字符串之后也是如此。修复 python 代码后,现在一切正常。感谢一个和所有帮助解决问题的人。简而言之,JSON字符串是罪魁祸首,在正确修复字符串后,现在一切正常。