• 1. JSON及JSON处理一叶知秋 王健北京传智播客教育 www.itcast.cn
  • 2. 什么是JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。 更多信息的可以查看json的官方网站http://json.org。
  • 3. JSON建构于两种结构-1 “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 在Java语言中,我们可以将它理解成HashMap. 对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。 示例:var json = {“name”:”Jack”,”age”:90,”Marray”:true};
  • 4. JSON建构于两种结构-2值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array或List)。 数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。 示例:var json = [“Jack”,”Rose”,”Tom”,89,true,false];
  • 5. JSON的解析:JSON的解析分成两种情况: 将Object/Array解析成JSON字符串,这种情况一般用于响应用户的输出。 将Json串解析成Object或是Array,这种情况一般用于服务器接收到了用户请求的JSON串。 目前比较流行的解析工具为: json-lib。 fastjson.
  • 6. 使用json-lib解析:准备jar包: commons-beanutils.jar commons-collections-3.1.jar commons-lang-2.3.jar commons-logging.jar ezmorph-1.0.4.jar json-lib-2.3-jdk15.jar-这是json-lib的核心包,上面都是它的依赖包
  • 7. Json-lib:将Array解析成json串。使用JSONArray可以解析Array类型:
  • 8. Json-lib:将JavaBean/Map解析成JSON串:-使用JSONObject:
  • 9. Json-lib:使用JsonConfig过虑属性:适用于JavaBean/Map输出结果为:{“id”:“A001”},注意,没有name属性。
  • 10. Json-lib:将json串转换成Array:以下是输出结果:
  • 11. Json-lib:将json串转成JavaBean/Map:
  • 12. Fastjson介绍:Fastjson是一个Java语言编写的JSON处理器。 1、遵循http://json.org标准,为其官方网站收录的参考实现之一。 2、功能强大,支持JDK的各种类型,包括基本的JavaBean、Collection、Map、Date、Enum、泛型。 3、无依赖,不需要例外额外的jar,能够直接跑在JDK上。 4、开源,使用Apache License 2.0协议开源。   5、支持使用注解对字段的过虑。 Fastjson的最主要的使用入口是com.alibaba.fastjson.JSON
  • 13. JSON类的功能: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); 将JavaBean转换为JSONObject或者JSONArray。
  • 14. FastJson示例:-将Java对象转成JSON串:
  • 15. FastJson:使用注解过虑去除某些字段:
  • 16. FastJson-将字符串转成对象:
  • 17. 更多功能详情 以下示例仅供参考…………………….
  • 18. 其他示例:对某些字段时间名称转换:
  • 19. 使用PropertyFilter过虑不需要的字段:
  • 20. ValueFilter-值过虑
  • 21. 使用JSONField定制序列化
  • 22. 原型接口原型接口支持。这个功能借鉴自jackson,比较好玩,也许能够节省代码
  • 23. 循环引用很多用户在初次使用fastjson时都遇到了循环引用的问题,这是反映最多的问题,我越来越认识到支持循环引用的必要性。经过测试,加入循环应用的支持对性能的影响很小,小于5%。我决定在1.1.3加入循环应用支持,而且是缺省打开这个特性。 fastjson支持的循环应用是自然的,不需要象jackson那样,需要Annotation设置。fastjson支持的引用,是基于path的,方便javascript解析。 Fastjson目前已经为我们解决好了循环引用的问题。
  • 24. 循环引用的解决办法在1.1.3版本之前,fastjson不支持循环引用。有些对象存在循环引用,例如: parent和children之间存在循环应用了,执行JSON序列化时会报错:“com.alibaba.fastjson.JSONException: maybe circular references” 。 解决办法一 在parent字段上添加修饰符transient 解决办法二 使用Annotation @JSONField标注不需要序列化getParent属性
  • 25. 按字段名称排序后输出很多场合需要按字段名称排序之后输出,为了满足这一需求,fastjson 提供了一个新特性SortField。 使用方式如下: JSON.toJSONString(object, SerializerFeature.SortField)
  • 26. 自定义序列化
  • 27. 自省支持在标准中,将对象序列化为JSON文本之后,就丢失了类型信息。虽然fastjson能够支持parse时传入Class来实现类型的识别,但是这个有局限性,在fastjson 1.1.3之后,完善支持一个特性,就是自省。 输出的信息如下:注意@type信息