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 异常

求高手指点

中文意思是说第一个对象是string。

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

参考技术A No zuo no die why still try

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的主要内容,如果未能解决你的问题,请参考以下文章

java怎么使用gson解析json字符串

使用gson解析怎么将json字符串解析为数组

java对象与Json互转

[转]快速搞懂Gson的用法

Gson解析复杂JSON字符串的两种方式

Gson(http://www.jianshu.com/p/e740196225a4)