gpt4 book ai didi

java - com.google.gson.JsonSyntaxException : java. lang.IllegalStateException:需要一个字符串,但结果是 BEGIN_ARRAY

转载 作者:行者123 更新时间:2023-12-01 18:23:05 24 4
gpt4 key购买 nike

我正在尝试使用 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 中的对象。

MetadataitemsArrayList<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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com