JSON

让fastjson按类对象的类型解析json

字号+ 作者:H5之家 来源:H5之家 2015-11-12 17:14 我要评论( )

一,问题描述 在项目开发中,有一个需求是把一个功能中的入库操作打包成json串,发送到另外一台服务器上解析处理,数据库的操作是用的mybatis,发过来的json串是一个嵌套字符串,也就是一个类中有另一个类,一起打包成json的格式,例如:{id:1,value:{id:234

一,问题描述

  在项目开发中,有一个需求是把一个功能中的入库操作打包成json串,发送到另外一台服务器上解析处理,数据库的操作是用的mybatis,发过来的json串是一个嵌套字符串,也就是一个类中有另一个类,一起打包成json的格式,例如:{"id":1,"value":{"id":234}},它对应的对象是:

package com.test; public class TestBuilder { private long id; private Object value; public Object getValue() { return value; } public void setValue(Object value) { this.value = value; } public long getId() { return id; } public void setId(long id) { this.id = id; } } package com.test; public class ObjBean { private long id; public long getId() { return id; } public void setId(long id) { this.id = id; } } package com.test; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializeConfig; import com.alibaba.fastjson.serializer.SerializerFeature; public class TestMain { public static void main(String[] args) { ObjBean objBean = new ObjBean(); objBean.setId(234L); TestBuilder testBuilder = new TestBuilder.Builder().id(1).value(objBean).build(); String str = JSON.toJSONString(testBuilder); System.out.println(str); } }

但是在返解析的时候,fastjson只会先解析最外面的一层到最外面的类上面,给最外面的类赋值。而内部的类会转化为一个map,而在map中,类objBean的值会变成int类型,这样在mybatis中就无法做到类型转换到报错。

 

二,解决问题

1,在打包成json的时候,使用fastjson的一个特性:

ObjBean objBean = new ObjBean(); objBean.setId(234L); TestBuilder testBuilder = new TestBuilder.Builder().id(1).value(objBean).build(); String str = JSON.toJSONString(testBuilder,SerializerFeature.WriteClassName); System.out.println(str);

输出:{"@type":"com.test.TestBuilder","id":1,"value":{"@type":"com.test.ObjBean","id":234}}

2,解析成类的时候

String str = "{\"@type\":\"com.test.TestBuilder\",\"id\":1,\"value\":{\"@type\":\"com.test.ObjBean\",\"id\":234}}"; TestBuilder test = JSON.toJavaObject(JSON.parseObject(str), TestBuilder.class); System.out.println(test.getId());

这个时候断点,就会发现test里面包含一个map,这个map中的值类型和objbean类定义中的类的类型是一致的。

如果转载,请注明来自游戏技术网:

可以加QQ群交流学习:Java技术交流群: 66728073 | C++技术交流群:197321069 | Cocos2dx交流群:317329853 | Unity3D交流群:286114103

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • springmvc 接收json对象

    springmvc 接收json对象

    2016-02-05 16:01

  • js array and json 转换

    js array and json 转换

    2016-01-24 19:49

  • 生成JSON元数据对象的典型技巧

    生成JSON元数据对象的典型技巧

    2016-01-24 16:00

  • JSON对象长度和遍历方法

    JSON对象长度和遍历方法

    2016-01-18 13:02

网友点评