博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
fastjson学习
阅读量:4223 次
发布时间:2019-05-26

本文共 4125 字,大约阅读时间需要 13 分钟。

JSON标准格式

背景

日常开发过程中,时常需要查验程序运行时对象的内容。对象结构简单时,我们可以通过重写Object的toString方法实现,但是对于那些含有复合类型的对象,上述方法就不能很好应对了。

JSON建构于两种结构:

  • “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

  • 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

JSON具有以下这些形式:

  • 对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。这里写图片描述

  • 数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。这里写图片描述

  • 值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。这里写图片描述

  • 字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。字符串(string)与C或者Java的字符串非常相似。这里写图片描述

  • 数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。这里写图片描述

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。

JSON示例

//定义一个符合数据类型,内含各种基本类型和集合类型public class Person {    private String name;    private int age;    private List
address; private String[] phoneNums; private Boolean isMarried; private List
friends = new ArrayList
(); public Person() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public List
getAddress() { return address; } public void setAddress(List
address) { this.address = address; } public String[] getPhoneNums() { return phoneNums; } public void setPhoneNums(String[] phoneNums) { this.phoneNums = phoneNums; } public Boolean getMarried() { return isMarried; } public void setMarried(Boolean married) { isMarried = married; } public List
getFriends() { return friends; } public void setFriends(List
friends) { this.friends = friends; }
//测试类    public class JSONTest {    public static void main(String[] args){        Person p1 = new Person();        p1.setName("Alex");        p1.setAge(21);        p1.setMarried(false);        String[] phoneNums1 = {
"11111","22222"}; p1.setPhoneNums(phoneNums1); List
address1 = new ArrayList
(); address1.add("aaaaa"); address1.add("bbbbb"); p1.setAddress(address1); Person p2 = new Person(); p2.setName("Bob"); p2.setAge(22); p2.setMarried(true); String[] phoneNums2 = {
"33333","44444"}; p2.setPhoneNums(phoneNums2); List
address2 = new ArrayList
(); address2.add("ccccc"); address2.add("ddddd"); p2.setAddress(address2); Person p3 = new Person(); p3.setName("Cathy"); p3.setAge(23); p3.setMarried(false); String[] phoneNums3 = {
"55555","66666"}; p3.setPhoneNums(phoneNums2); List
address3 = new ArrayList
(); address3.add("eeeee"); address3.add("fffff"); p3.setAddress(address3); p1.getFriends().add(p2); p1.getFriends().add(p3); String p1JsonStr = JSON.toJSONString(p1, true); System.out.println(p1JsonStr); }}

这里写图片描述

对于合格的JSON文本,可以使用如下代码自定义解析

Map
map = JSON.parseObject(p1JsonStr, new TypeReference
>(){});

上述代码将JSON文本按照Map

总结

JSON文本的转换重点在于文本格式是否合法,因此在使用前务必保证文本格式符合规范。

参考内容

你可能感兴趣的文章
编写苹果游戏中心应用程序(翻译 1.4 添加游戏工具包框架)
查看>>
编写苹果游戏中心应用程序(翻译 1.5 在游戏中心验证本地玩家)
查看>>
编写苹果游戏中心应用程序(翻译 1.6 获取本地玩家的信息)
查看>>
编写苹果游戏中心应用程序(翻译 1.7 在游戏中心添加朋友)
查看>>
编写苹果游戏中心应用程序(翻译 1.8 获取本地玩家的好友信息)
查看>>
WebGL自学教程《OpenGL ES 2.0编程指南》翻译——勘误表
查看>>
WebGL自学教程——WebGL示例:13.0 代码整理
查看>>
WebGL自学教程——WebGL示例:14.0 代码整理
查看>>
恶心的社会
查看>>
中国式危机公关9加1策略(第五章 慎用信息控制策略)
查看>>
展现自己的人生智慧
查看>>
深入理解java多态性
查看>>
Java新手进阶:细说引用类型
查看>>
osg中使用MatrixTransform来实现模型的平移/旋转/缩放
查看>>
(一) Qt Model/View 的简单说明
查看>>
(二)使用预定义模型 QStringListModel例子
查看>>
UVM:7.4.5 加入存储器
查看>>
UVM:7.5.1 期望值与镜像值
查看>>
UVM:7.5.2 常用操作及其对期望值和镜像值的影响
查看>>
UVM:7.6.1 检查后门访问中hdl 路径的sequence
查看>>