JSON

JSON(JavaScript Object Notation):JS对象简谱,它是一种轻量级的数据交换格式(占内存空间少)。是存储和交换文本信息的语法(注意不是一种编程语言)类似于XML,采用键值对的方式来保存数据。易于人与机器观察和使用数据。

语法格式:

假设要设置一本书,此对象有书名,和简介两个属性。

举栗子:

{
  "name":"独孤九剑",
  "info":"苦心智,劳筋骨,饿体肤,方可练成"
}

在JSON中,一个对象就由一个大括号表示,并且括号中描述的是对象的属性,通过键值对来描述对象的属性的值。

在“独孤九剑”例子中,name就是键,其对应的值就是独孤九剑,然后键值之间用冒号连接,并且多个键值之间使用逗号来分隔。

注意:键值对的键要用引号来引住,因为通常在Java解析中,如果键不使用引号会报错的,但在JS却不会。

键值对的值可以是JS中任意类型的数据。

数组在JSON中的格式:

可以与对象相互嵌套:[元素1,元素2,....]

举栗子:

以一个人的人际关系举例

人名:张三,年龄:19,朋友圈:李四,王二,麻子,灭绝师太。然后灭绝师太对象里有别人对她的评价:人很话不多。

{
  "name":"张三",
  "age":19,
  "friends":["李四","王二","麻子",{
       "name":灭绝师太,
       "info":"人狠话不多"
      }],
  "heihei":{
    "name":"大长刀",
    "length":"40m"
  }
}

(注意嵌套含义)

 将对象转化为JSON字符串

先创建Person对象举个栗子:

public class Person {
    private String id;//人送外号
    private String name;//真实名字
    private String info;//别人评价
    get....
    set...
    toString...
}

 

以Gson为例(google/gson)

public static void main(String[] args) {
        //1、创建Gson对象
        Gson g = new Gson();
        //2、转换
        Person p = new Person("灭绝师太","尼姑","人狠话不多");
        String s = g.toJson(p);
        System.out.println(s);

        /*匿名
        Person p = new Person("灭绝师太","尼姑","人狠话不多");
        String s = new Gson().toJson(p);
        System.out.println(s);
        */
    }

结果:

{"id":"灭绝师太","name":"尼姑","info":"人狠话不多"}

将JSON字符串转化为对象

对象 = new Gson().fromJson(JSON字符串,对象类型.class);

public static void main(String[] args) {
        //1、创建Gson对象
        Gson g = new Gson();
        //2、转换
        Person p = g.fromJson("{\"id\":\"灭绝师太\",\"name\":\"尼姑\",\"info\":\"人狠话不多\"}",Person.class);
        System.out.println(p.getId());
        System.out.println(p.getName());
        System.out.println(p.getInfo());
         /*
            也可以以匿名方式,这里就懒得打了
          */
    }

结果:

灭绝师太
尼姑
人狠话不多

还有数组,比如

public static void main(String[] args) {
        //1、创建Gson对象
        Gson g = new Gson();
        //2、转换 {"id":"灭绝师太","name":"尼姑","info":"人狠话不多","friends":["张三","麻子","嘿嘿"]}  加入了朋友圈这一数组
        HashMap data = g.fromJson("{\"id\":\"灭绝师太\",\"name\":\"尼姑\",\"info\":\"人狠话不多\",\"friends\":[\"张三\",\"麻子\",\"嘿嘿\"]}",HashMap.class);
        System.out.println(data.get("friends"));//当你输出data.get("friends").getClass时friends类型是ArrayList 注意!!! 
        List friends = (List)data.get("friends");
        System.out.println(friends.get(0));
    }

结果:

[张三, 麻子, 嘿嘿]
张三

哦,还有FastJSON(阿里巴巴提供的)

首先是对象转化为JSON:

public static void main(String[] args) {
        Person p = new Person("灭绝师太","尼姑","人狠话不多");
        //1、转换
        String json = JSON.toJSONString(p);
        System.out.println(json);
}

结果:

{"id":"灭绝师太","info":"人狠话不多","name":"尼姑"}

然后是JSON转化为对象

public static void main(String[] args) {
        //1、转换 {"id":"灭绝师太","info":"人狠话不多","name":"尼姑"}
        Peson p = JSON.parseObject("{\"id\":\"灭绝师太\",\"info\":\"人狠话不多\",\"name\":\"尼姑\"}",Person.class);
        System.out.println(book.getId());
        //{"一二三","二三四","三四五"}   随便举个数组的例子
        List<String> strings = JSON.parseArray("[\"一二三\",\"二三四\",\"三四五\"]",String.class);
        System.out.println(strings.get(1));
    }

这里注意,不像GSON,这里数组有单独的方法转化。不过总体来说无论是GSON还是FastJSON他们的方法都很见名知意,很好理解。

---------------------------------------------------------------------------------


作者:PuPile