gson字符串 复杂对象 互转 请用 gson
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gson字符串 复杂对象 互转 请用 gson相关的知识,希望对你有一定的参考价值。
"msglis":"org.lhf.entity.Room@f20235":["userName":"lhf"]
UserInfo 对象的属性
private String id;
private String userName;
private String password;
private String pirture;
private Integer state;
Room 对象的属性
private String id;
private String name;
public class MsgEntity
private Map<Room,List<UserInfo> > msglis;//用户房间信息集合
private UserInfo user;//当前用户
private Room room;//当前房间
//get and set 省略
//下面是我的错误
MsgEntity msgentity = new MsgEntity();
UserInfo u = new UserInfo();
List<UserInfo> list = new ArrayList<UserInfo>();
u.setUserName("lhf");
list.add(u);
Room r = new Room();
r.setName("lhf");
System.out.println("toString" +new Gson().toJson(msgentity));
//这句输出:"msglis":"org.lhf.entity.Room@f20235":["userName":"lhf"]
System.out.println("rtoString" +new Gson().fromJson(new Gson().toJson(msgentity), MsgEntity.class));
//报 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 13 异常
求高手指点
MsgEntity msgentity = new MsgEntity();
UserInfo u = new UserInfo();
List<UserInfo> list = new ArrayList<UserInfo>();
u.setUserName("lhf");
list.add(u);
Room r = new Room();
r.setName("lhf");
//这段代码msgentity 这只定义根本就没使用。你+new Gson().fromJson(new Gson().toJson(msgentity), MsgEntity.class));这样写有什么意义?追问
" new Gson().fromJson(new Gson().toJson(msgentity) " 中第一个参数gson字符串
我外面也没定义string 变量 而刚好new Gson().toJson(msgentity) 返回一个gson 字符串给我,所以我就这样写了,大神请帮帮我,谢....
你这写法并没问题。to json参数可以是Json字符串。你把msgentity改成r试试。
追问我试过了,类型不配,如果我用单个对象(不包含集合属性),单个list ,map ,我都能互转,就是 class bean list r;string name 这种包含集合属性的不会转
追答//我这模拟放入一个集合可以的。Gson g=new Gson();
Auto a=new Auto();
Book b=new Book();
b.setId(1);
Book b1=new Book();
b1.setId(12);
b1.setName("啊啊");
List<Book> list=new ArrayList<Book>();
list.add(b1);
list.add(b);
a.setList(list);
a.setSpeed(0);
//System.err.println(g.toJson(a));
System.err.println(g.fromJson(g.toJson(a), Auto.class));追问
class Auto
private List list1;
private Map> msglis; //Room(String id,String name)
public void setMsglis(Map> msglis)
this.msglis = msglis;
//我在你的基础上加了map就报错了
ROOM类必须写在Auto类里面。和auto类平级。
public class Auto
class ROOM
java对象与Json互转
1.各种json工具包比较
四个JSON类库分别为:Gson,FastJson,Jackson,Json-lib。
适用:使用FastJson进行JSON字符串解析,Jackson将集合转成JSON格式字符串。
参考:https://blog.csdn.net/jiyueqianxue/article/details/83377181
2.Jackson
依赖包:3个, jackson-core:核心包;jackson-annotations:注解包;jackson-databind:数据绑定包。
- The Jackson ObjectMapper which parses JSON into custom Java objects, or into a Jackson specific tree structure (tree model).
- The Jackson JsonParser which is Jackson\'s JSON pull parser, parsing JSON one token at a time.
参考:
http://tutorials.jenkov.com/java-json/index.html
https://www.cnblogs.com/fanblogs/p/11153010.html
以上是关于gson字符串 复杂对象 互转 请用 gson的主要内容,如果未能解决你的问题,请参考以下文章