gpt4 book ai didi

java - 斜杠上的 Gson MalformedJsonException

转载 作者:行者123 更新时间:2023-12-02 05:51:26 26 4
gpt4 key购买 nike

我正在尝试使用 Gson 反序列化一个类。

这是我试图反序列化的类:

public class Product {

public String id;
public String name;
public String expDate;
public String iconPath;

public Product(final String id, final String name, final String expDate, final String iconPath) {
this.id = id;
this.name = name;
this.expDate = expDate;
this.iconPath = iconPath;
}

@Override
public final String toString() {
return new Gson().toJson(this);
}

}

这是使用的代码:

final String serializedProducts = PreferenceManager.getDefaultSharedPreferences(activity).getString("products_" + sectionNumber, null);
if(serializedProducts != null) {
final Gson gson = new GsonBuilder().create();
final List<?> deserializedProducts = gson.fromJson(serializedProducts, List.class);
final List<Product> result = new ArrayList<Product>();
for(final Object product : deserializedProducts) {
//System.out.println(product.toString());
result.add(gson.fromJson(product.toString(), Product.class));
}
}

这是 System.out.println(...) 的输出:

{expDate=4/6/2014, iconPath=/data/data/fr.skyost.fridge/files/images/5000112558265, id=5000112558265, name=Coca-Cola Zéro}

{expDate=4/6/2014, iconPath=/data/data/fr.skyost.fridge/files/images/5000112558265, id=5000112558265, name=Coca-Cola Zéro}

{expDate=4/6/2014, iconPath=/data/data/fr.skyost.fridge/files/images/3564700371107, id=3564700371107, name=Eau minérale}

我在第 1 行第 12 列(斜杠)处遇到异常 MalformedJsonException

那么我该如何继续反序列化它呢?

谢谢;)

最佳答案

JSON 需要引用字符串值(包括关键字)。 JSON 的名称/值分隔符是冒号,而不是等于。

因此,为了成为有效的 JSON,文本应该是:

{"expDate":"4/6/2014", "iconPath":"/data/.../5000112558265", "id":5000112558265, "name":"Coca-Cola Zéro"}

引用http://json.org了解完整详细信息。

我刚刚注意到您的 toString 实现使用 GSON 生成表面上的 JSON 输出,但是要么没有使用该 toString 方法,要么 GSON 对什么构成有效的 JSON。我的预期肯定是前者。

我想,既然我看得更仔细,我现在就看到了问题;无论它们是什么,您的反序列化对象都不是 Product 的实例。所以下面的代码:

for(final Object product : deserializedProducts) {
//System.out.println(product.toString());
result.add(gson.fromJson(product.toString(), Product.class));

不会调用Product.toString,但任何对象gson.fromJson(serializedProducts, List.class);toString会产生和添加到列表中。

您应该将 product.getClass() 添加到调试输出中以证明这一点。然后您应该研究如何创建 Product 的实际实例。

关于java - 斜杠上的 Gson MalformedJsonException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23500436/

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