码迷,mamicode.com
首页 > Web开发 > 详细

json使用笔记

时间:2015-06-17 21:44:30      阅读:359      评论:0      收藏:0      [点我收藏+]

标签:json

开源项目

  • org.json 这个项目比较弱,但是不少项目在引用
  • Gson 这个之前一直用,后来Fastjson出来后,看别人用的多,也就改用Fastjson了
  • Fastjson
    • 网上说速度比较快,对速度还不敏感,但其接口用起来比Gson更简洁
    • 定制化,可以通过@JSONField解决JSON名称中包含下划线、大小写等不规范问题
    • 甚至还可以定制哪个字段是否输出

规范

开始参考了json规范,这个文档写的比较乱,下面重新整理了下.另外官方文档也比较清楚

1.JSON语法

JSON文本是一个标记符的序列。这套标记符包含六个构造字符、字符串、数字和三个实字名。
以下是六个构造字符:

符号 含义 中文名称
begin-array [ 左方括号
begin-object { 左大括号
end-array ] 右方括号
end-object } 右大括号
name-separator : 冒号
value-separator , 逗号

在这六个构造字符的前或后允许存在无意义的空白符。

ASCII码 名称
0x20 空格符
0x09 水平制表符
0x0A 换行符
0x0D 回车符

2.值

JSON必须(MUST)是一个对象、数组、数字或字符串,或者是实字名:
value = false / null / true / object / array / number / string
技术分享
2.1. 实字名
只有三个 false null true
实字名必须(MUST)是小写的,且不允许有其它的实字名。
2.2. 对象
对象结构被表示为:一对大括号包围着零个或多个name/value对(或者是成员)。
技术分享
2.3. 数组
数组结构表示为:方括号包围着零个或多个值(或是元素)。元素间以逗号相隔。
技术分享
2.4. 数字
数字的表示法与其它多数编程语言相似。要点:
技术分享
- 不允许有八进制及十六进制形式。
- 前面带有0也是被禁止的。
- 数字值不能表示成阿拉伯数字数字的序列(如Infinity和Nan是不允许的)。

2.5. 字符串
技术分享
- string以引号开始与结束。
- 所有的Unicode字符都可以放置在引号中,除了转义字符:引号、反斜杆\、控制符(U+0000 - U+001F),这些字符可以用unicode编码表示:”\u005C”。
- 另一种办法,可以用两个转义字符序列来表示一些常用的字符。所以像只包含一个反斜杆字符的字符串可以更简洁的表示成”\”。

FastJson主要功能

详细官方文档
主要接口

public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray 
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject    
public static final  T parseObject(String text, Class clazz); // 把JSON文本parse为JavaBean 
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray 
public static final  List parseArray(String text, Class clazz); //把JSON文本parse成JavaBean集合 
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 
public static final Object toJSON(Object javaObject); //6将JavaBean转换为JSONObject或者JSONArray。

几个常用功能:
1.不规范名称处理
可以把@JSONField配置在字段或者getter/setter方法 如@JSONField(name=”_ID”),详细可参考官方文档

2.日期处理
处理日期的API,序列化JSON.toJSONStringWithDateFormat(date, “yyyy-MM-dd HH:mm:ss.SSS”)

反序列化能够自动识别如下日期格式:

  • ISO-8601日期格式
  • yyyy-MM-dd
  • yyyy-MM-dd HH:mm:ss
  • yyyy-MM-dd HH:mm:ss.SSS
  • 毫秒数字
  • 毫秒数字字符串
  • .NET JSON日期格式
  • new Date(198293238)

3.定义某几个字段被序列化处理
使用SimplePropertyPreFilter过滤属性,参考


  SimplePropertyPreFilter filter = new SimplePropertyPreFilter(VO.class, "name1", "name2");
  JSON.toJSONString(vo, filter);

4.JSON格式化输出
如JSON.toJSONString(XX,SerializerFeature.PrettyFormat);

其它注意事项

  1. 如果包含内部类,需要增加static类修饰符,否则反序列化会失败
  2. 另外,在引用不同的框架或者库时,会使用不同的json框架,如IO框架是org.json,我业务代码中一直用FastJson,为了与业务代码融合,先把JSONObject进行toString,然后再toJSON,感觉好傻~~

json使用笔记

标签:json

原文地址:http://blog.csdn.net/lichangzhen2008/article/details/46536495

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!