- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Gson 将传入的 Json(如下所示)解析为 Java 对象。 Json 请求似乎是有效的,但我在解析它时遇到以下异常。
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY at line 5 column 19 path $.metadata.
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226) ~[gson-2.8.5.jar:?]
at com.google.gson.Gson.fromJson(Gson.java:927) ~[gson-2.8.5.jar:?]
传入 Json 请求:
{
"metadata": {
"salesId": "123",
"promoCode": "2010",
"items": [
{
"0": {
"productCode": "1234",
"total": 169900
},
"1": {
"productCode": "4567",
"total": 19900
}
}
]
}
}
解析逻辑:
protected <T extends GenericModel> Optional<T> convertFromJson(final String json, final Class<T> clazz) {
if (StringUtils.isEmpty(json)) {
return Optional.empty();
}
return Optional.of(new Gson().fromJson(json, clazz));
}
Java 类:
public class Metadata {
private String salesId;
private String promoCode;
private ArrayList<Object> items = new ArrayList<Object>();
public String getSalesId() {
return salesId;
}
public void setSalesId(String salesId) {
this.salesId = salesId;
}
public String getPromoCode() {
return promoCode;
}
public void setPromoCode(String promoCode) {
this.promoCode = promoCode;
}
public ArrayList<Object> getItems() {
return items;
}
public void setItems(ArrayList<Object> items) {
this.items = items;
}
@Override
public String toString() {
return "Metadata{" +
"salesId=" + getSalesId() +
"promoCode=" + getPromoCode() +
"items=" + getItems() +
'}';
}
}
请注意,Metadata.java 是一个内部类。
一直在尝试解决这个问题,但没有成功。有人可以让我知道如何解决吗? TIA。
最佳答案
我猜问题出在items
您尝试反序列化的 json 中的对象。
在 Metadata
类items
是 ArrayList<Object>
但这并没有告诉 gson 如何反序列化它。
相反,您应该尝试为 Item
创建另一个 POJO然后制作items
一个ArrayList<Item>
。像这样的:Gson and deserializing an array of objects with arrays in it
您可以检查是否 items
通过注释掉该属性并仅发送 salesId
来解决问题。和promoCode
.
关于java - com.google.gson.JsonSyntaxException : java. lang.IllegalStateException:需要一个字符串,但结果是 BEGIN_ARRAY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60272296/
我正在开发一个通过 HTTPS POST 请求将数据导入 Web 服务的项目。为了创建 HTTPS 请求,我使用了 Retrofit2。这是我关于如何创建请求和评估响应的方法: 我正在创建一个对象来存
我遇到了 JSON 解析错误。我的代码如下: try { //Read the server response and attempt to parse it as JSON
我正在使用托管在 SmarterAsp.net 上的 ASP Web API 网络服务以 Json 格式获取数据以在我的 android 应用程序中使用它们,当我使用 Wifi 时一切正常并且 Jso
大家好,我正在制作一个 Android 应用程序,其中我收到 4 条错误消息: GSON 无法解析为类型 JsonSyntaxException 无法解析为类型 和另外2个 刚刚添加了gson-2.2
我最近决定使用 Android 的 Retrofit Library 来进行网络调用,并使用 GSON 来处理 JSON。但我不断收到以下异常,并且我的应用程序崩溃了。 Caused by: retr
我是retrofit的新手(我之前使用volley),在此之前我在retrofit方面做得很好,直到出现此错误:- com.google.gson.JsonSyntaxException: java.
我正在运行一些 Java 分析工具来进行 WES 分析。所以,我可以被认为是 Java 的新手 :( 顺便说一句,我使用 PharmCAT 来分析我的 VCF 文件。但我得到了这个错误: com.go
我有一个名为 DateTime 的自定义对象。我使用方法 registerTypeAdapter 注册 TypeAdapter 。我认为 GSON 忽略了这个适配器。 GSON如何检测json对象中的
我正在尝试使用 Gson 反序列化一个 json 数组,但目前我收到了一个 JsonSyntaxException。 json 字符串是由 .NET MVC3 Web 服务使用 JsonResult
正在测试一个抛出 JsonSyntaxException 的类,即使我期望抛出预期的错误,测试仍然失败。我的测试: @规则 公共(public) ExpectedException 异常 = Expe
我正在读取一个 Json 字符串并使用 scala 代码将其转换为一个对象: val myInstance = (new Gson()).fromJson(t, classOf[myClass]) 一
相关Question Json的响应是换行符Json: {"type":"data","id":"xyz"} {"type":"value","id":"xcf"} .... .... 我正在使用Re
我正在尝试复制 Google App Engine Servlet 模块 here使用 Retrofit 而不是 AsyncTask。 我觉得很奇怪,但显然 Retrofit 2.0 不支持连接到 G
我遇到了这个问题,我不想解决那个问题,但想办法告诉 GSON“跳过错误并继续”解析: Can't parses json : java.lang.IllegalStateException:
首先,我知道其他一些用户之前已经问过类似的问题,所以您可能认为这是一个重复的问题,但事实并非如此。 我想创建一个模型类来解析 GoogleMaps-Direction API 响应从 JSON 格式到
我是 gson 新手并收到此错误。 com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为 BEGIN_OBJE
我正在获取一个 JSON 字符串,并希望将其转换为类型化对象。 但是我收到以下反序列化错误: 04-02 16:20:45.632: E/AndroidRuntime(30912): com.goog
我有一个 JSON 文件: { "settings": { "header": { "id": "240A64CDC43F", "filename": "net
我正在尝试使用其 Java 驱动程序测试 ArangoDB。我正在 CentOS 6.6 上测试它。我收到以下错误: 15:48:01.151 [main] DEBUG com.arangodb.ht
这个问题已经有答案了: Gson to json conversion with two DateFormat (3 个回答) 已关闭 6 年前。 我遇到以下异常 - com.google.gson.
我是一名优秀的程序员,十分优秀!