fastjson学习

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<String> address;
    private String[] phoneNums;
    private Boolean isMarried;
    private List<Person> friends = new ArrayList<Person>();

    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<String> getAddress() {
        return address;
    }

    public void setAddress(List<String> 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<Person> getFriends() {
        return friends;
    }

    public void setFriends(List<Person> 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<String> address1 = new ArrayList<String>();
        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<String> address2 = new ArrayList<String>();
        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<String> address3 = new ArrayList<String>();
        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<String,Object> map = JSON.parseObject(p1JsonStr, new TypeReference<Map<String, Object>>(){});

上述代码将JSON文本按照Map

总结

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

参考内容

http://www.json.org/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值