gpt4 book ai didi

java - 如何使用 GSON 解码字符串对列表?

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

我有一个从 Web 请求返回的类别列表,采用 JSON 格式。一个例子可能是:

"categories":[["Descriptive Cat 1 Name","cat1label"]]

这将如何在对象中表示?我目前有一个名为 Category 的对象,并且使用它的方式如下:

private List<Category> categories;

类别对象看起来像:

class Category {
private String descrName;
private String label;
.. getters and setters..
}

当尝试使用 GSON 解码时,出现此错误:

01-27 21:44:46.149: ERROR/AndroidRuntime(843): com.google.gson.JsonParseException: Expecting array but found object: Category@437d1ff8

有什么建议吗?我也可以让它们作为 map 返回,尽管 JSON 结果中的 K,V 不是 V,K,可以这样映射吗?

如果我完全放弃 Category 对象,并将其映射为:

private List<List<String,String>> categories;

但是有没有更好的方法来表示这些数据?

尼克

最佳答案

正如 @Dante617 正确指出的那样,您的 JSON 表示不正确。正确的表示方法是

{
"categories": [
{"descrName":"Descriptive Cat Name 1", "label": "cat1Label"},
{"descrName":"Descriptive Cat Name 2", "label": "cat2Label"}
]
}

现在,这可以被视为“类别”标题和类别对象列表的映射。。因此,映射它的 Java 对象将是 Map<String, List<Category>>

如果您以某种方式像上面那样正确地重新格式化字符串。以下是您的解析方式。

    String categories = "{\"Categories\":[{\"descrName\":\"Descriptive Cat 1 Name\",\"label\":\"cat1label\"}, {\"descrName\":\"Descriptive Cat 2 Name\",\"label\":\"cat2label\"}]}";
Gson gson = new Gson();
Type type = new TypeToken<Map<String, List<Category>>>() {}.getType();
Map<String, List<Category>> l = gson.fromJson(categories, type);
System.out.println("l: " + l);

如果你的 Java 对象看起来像这样

public class Category {
private String descrName;
private String label;
//no need of getters and setters. Reflection, baby! :)

@Override
public String toString() {
return "<Name:"+descrName+", label:"+label+">";
}
}

输出将如下所示

 l: {Categories=[<Name:Descriptive Cat 1 Name, label:cat1label>, <Name:Descriptive Cat 2 Name, label:cat2label>]}

关于java - 如何使用 GSON 解码字符串对列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4824689/

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