|
JSON
JSONJSON 是一个互联网上广泛运用的数据交互格式,语法介绍见:http://www.json.org/ 存在价值Java环境下官方的JSON实现并不理想。不仅接口繁琐复杂。效率也非常难堪。 接口的设计完全不能发挥Java自身优势,Java标准集合,常见原始类型,JavaBean不便直接JSON化。 更残酷的现实是,目前其他可用的JSON实现都严重被官方网站的形式影响,都表现的拖泥带水,严重背离了JSON简单特性。 而JSEL 的JSON支持,就是为了打破这个僵局,让JSON与Java更好的融合。 使用JSEL 解析JSON++Lite 的默认表达式实现JSEL,支持JavaScript 表达式语法,本身就是一个JSON 的父集。他除了能解释普通JSON 数据之外,也可以在JSON语法中增加注释,甚至表达式,变量等支持。 JSEL 可以直接执行JavaScript表达式,解析JSON这个JavaScript表达式子集当能也就不在话下了。通过JSEL解释JSON不仅可以按照宽松的语法模式,还可以在解析的过程中完成一些基本的表达式计算。
使用JSONDecoder 解析JSON
最简单的JSON解码方法。使用一个简单的静态函数,这种模式将采用宽松的语法模式解析JSON。
对象键可省略引号,字符串允许多行也可以用小引号,支持JS定义的全部其他数字字面量格式
自定义解码器不仅可以控制是否采用严谨的语法模式,也可以解码的同时;指定输出类,完成特定的类型转换(JavaBean需要有默认构造器,详细转换规则见JSONType)。
使用JSONEncoder 编码JSON这是一个简单的线程安全的工具类,允许安全的将普通JavaBean对象或者Java集合编码成JSON输出。
不能表示数据引用的递归形式是JSON的一大软肋,所以我们需要一个用来处理递归问题的机制。 最简单的JSON化方法。使用一个简单的静态函数: 不输出class属性,最大深度为64,递归检测(发现递归后抛出异常) String json= JSONEncoder.encode(object);
构造函数的参数意义,当一个JavaBean被当作object序列化时,是否处理class属性,设置最大处理深度。//第一个参数(printClassName)设置为输出JavaBean class属性, //第二个参数(depth)并控制最大深度为32 //第三个参数(addressEqual)设置是否通过引用地址重复来确定是否递归引用,默认为真(避免equals方法异常) //第四个参数(throwError )是指当发生循环引用时,是否抛出异常(如果不抛异常,打印错误日志后,循环部分当null输出)。 JSONEncoder encoder= new JSONEncoder(true,32,true,true); //第一个参数指需要编码的对象 //第二个参数指定输出流(StringBuilder,StringBuffer,Writer) encode.encode(object,out); 支持类型
下载 | |
► Sign in to add a comment