用Gson将json转换为List<JavaBean>时,报declares multiple JSON fields named serialVersionUID
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Gson将json转换为List<JavaBean>时,报declares multiple JSON fields named serialVersionUID相关的知识,希望对你有一定的参考价值。
我的JavaBean实体类是继承父类Entity的,Entity实现了serializable接口的。 求大神帮忙, 怎么解决啊? 什么原因导致的呢???、
在线等啊
new GsonBuilder().excludeFieldsWithModifiers(Modifier.PROTECTED),这句是忽略掉了修饰符是受保护protected的属性,对象中protected修饰符的字段将不会被转换,还是发现报declares multiple JSON fields named serialVersionUID,发现我对象中有private static final long serialVersionUID = 1L;,然后又忽略了所有static修饰符的字段就OK了
参考技术A 你检查一下你的代码,是不是在List和和你自定义的类中 有相同的字段呢 如果有的话,就不对了!追问我检查了有id是父类和子类都有的, 但是我已经设置了排除策略了将父类重复的id给排除了:new GsonBuilder().excludeFieldsWithModifiers(Modifier.PROTECTED)
本回答被提问者采纳 参考技术B 一般是你javaBean中实现类与继承父类Entity有重复的属性,json解析异常,删除其中一个即可 参考技术C 在gson2.0之后会有这个问题, 降到gson1.x就可以了在 Java 中将 JSON 转换为 List<List<String>>
【中文标题】在 Java 中将 JSON 转换为 List<List<String>>【英文标题】:Convert JSON to List<List<String>> in Java 【发布时间】:2015-06-05 05:29:31 【问题描述】:我以这种方式拥有 Json 字符串,
json= ["id":"1","label":"2","code":"3","id":"4","label":"5","code":"6"]
我尝试使用 Gson 以这种方式将其转换为 Java 对象,
还有一个名为 Item.java 的 Pojo,其中包含 id、label、code 和 getter setter 字段。
String id;
String label;
String code;
//getter setters
Gson gson = new Gson();
List<Item> items = gson.fromJson(json, new TypeToken<List<Item>>().getType());
然后以这种方式将Java Object转换为List,
List<String> strings = new ArrayList<String>();
for (Object object : items)
strings.add(object != null ? object.toString() : null);
我的输出是这样的,
[Item [id=1, label=2, code=3], Item [id=6, label=5, code=6]
但我需要它作为 List<List<String>>
并且没有 [Items] 即,
[[id=1, label=2, code=3],[id=4, label=5, code=6]]
or direct
List<List<String>>
没有钥匙。
[[1, 2, 3],[4, 5, 6]]
我错过了什么?有人可以帮助我吗?
【问题讨论】:
您真的需要List<List<String>>
,还是只是您不喜欢Item#toString()
格式化数据的方式?
我真的没有在这里看到列表。我个人认为你不需要一个。 Item
的 toString
方法是什么样的?
【参考方案1】:
您已经发布的代码为您提供了List<Item>
,所以听起来您只是不确定如何从中构建List<List<String>>
。
你在这里做什么:
for (Object object : items)
没有利用items
是List<Item>
,而不是List<Object>
这一事实。
您可以创建一个增强的 for 循环,像这样拉出实际的 Item
s:
for (Item item : items)
这将使您可以正确访问其中的数据以构建子列表:
String json = "[id:1,label:2,code:3,id:4,label:5,code:6]";
List<Item> items = new Gson().fromJson(json, new TypeToken<List<Item>>().getType());
List<List<String>> listOfLists = new ArrayList<>();
for (Item item : items)
List<String> subList = new ArrayList<>();
subList.add(item.getId());
subList.add(item.getLabel());
subList.add(item.getCode());
listOfLists.add(subList);
System.out.println(listOfLists); // [[1, 2, 3], [4, 5, 6]]
但是
如果只是您不喜欢 List<Item>
的输出格式,更简单的修复代码的方法是覆盖 toString()
,使其打印您需要的内容。
如果我在Item
中创建toString()
方法看起来像这样:
public class Item
private String id;
private String label;
private String code;
@Override
public String toString()
return "[" + id + ", " + label + ", " + code + "]";
// getters, setters...
...然后当我打印 List<Item>
时,它看起来就像你想要的那样:
String json = "[id:1,label:2,code:3,id:4,label:5,code:6]";
List<Item> items = new Gson().fromJson(json, new TypeToken<List<Item>>().getType());
System.out.println(items); // [[1, 2, 3], [4, 5, 6]]
【讨论】:
以上是关于用Gson将json转换为List<JavaBean>时,报declares multiple JSON fields named serialVersionUID的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 使用 Gson 将 json 字符串转换为对象列表