技术点16:JSON

JAVA学习网 2020-11-17 19:51:04

JSON技术

一、什么是 JSON?

  JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,而且很多语言都提供了对 json 的支持(包括 C, C++, C#, Java, JavaScript, Perl, Python等)。 这样就使得 JSON 成为理想的数据交换格式。
  json 是一种轻量级的数据交换格式。
  轻量级指的是跟 xml 做比较。
  数据交换指的是客户端和服务器之间业务数据的传递格式。
 

二、JSON 在 JavaScript 中的使用

2.1、json 的定义

  json 是由键值对组成,并且由花括号(大括号)包围。每个键由引号引起来,键和值之间使用冒号进行分隔,多组键值对之间进行逗号进行分隔。
 
示例:
// json的定义
            var jsonObj = {
                "key1":12,
                "key2":"abc",
                "key3":true,
                "key4":[11,"arr",false],
                "key5":{
                    "key5_1":551,
                    "key5_2":"key5_2_value"
                },
                "key6":[{
                    "key6_1_1":6611,
                    "key6_1_2":"key6_1_2_value"
                },{
                    "key6_2_1":6621,
                    "key6_2_2":"key6_2_2_value"
                }]
            }

2.2、json的访问

  json 本身是一个对象。
  json 中的 key 我们可以理解为是对象中的一个属性。
  json 中的 key 访问就跟访问对象的属性一样: json 对象.key
 
示例:
// json的访问
            alert(typeof(jsonObj));//object  json就是一个对象
            alert(jsonObj.key1);//12
            alert(jsonObj.key2);//abc
            alert(jsonObj.key3);//true
            alert(jsonObj.key4);//得到数组[11,"arr",false]
            //json中数组的遍历
            for (var i = 0; i < jsonObj.key4.length; i++){
                alert(jsonObj.key4[i]);
            }
            alert(jsonObj.key5.key5_1);//551
            alert(jsonObj.key5.key5_2);//key5_2_value
            alert(jsonObj.key6);//得到json数组
            //取出来每一个元素都是json对象
            var jsonItem = jsonObj.key6[0];
            alert(jsonItem.key6_1_1);//6611
            alert(jsonItem.key6_1_2);//key6_1_2_value

2.3、json 的两个常用方法

json 的存在有两种形式。
  一种是:对象的形式存在,我们叫它 json 对象。
  一种是:字符串的形式存在,我们叫它 json 字符串。
 
一般我们要操作 json 中的数据的时候,需要 json 对象的格式。
一般我们要在客户端和服务器之间进行数据交换的时候,使用 json 字符串。
 
JSON.stringify()  把 json 对象转换成为 json 字符串
JSON.parse()  把 json 字符串转换成为 json 对象
 
示例:
// json对象转字符串
            var jsonString = JSON.stringify(jsonObj);
            alert(jsonString);
            // json字符串转json对象
            var jsonObj2 = JSON.parse(jsonString);
            alert(jsonObj2);
            alert(jsonObj2.key1);//12
            alert(jsonObj2.key2);//abc

 

三、JSON 在 java 中的使用

 主要是类型的转换,需要用到如下的jar包:

 

创建Person.java类:

 

3.1、javaBean 和 json 的互转

   @Test
    public void test1(){
        Person person = new Person(1, "郭鹏");
        //创建Gson对象实例
        Gson gson = new Gson();
        //toJson方法可以把Java对象转换成JSON字符串
        String personJsonString = gson.toJson(person);
        System.out.println(personJsonString);//{"id":1,"name":"郭鹏"}

        // fromJson 把 json 字符串转换回 Java 对象
        // 第一个参数是 json 字符串
        // 第二个参数是转换回去的 Java 对象类型
        Person person1 = gson.fromJson(personJsonString, Person.class);
        System.out.println(person1);//Person{id=1, name='郭鹏'}
    }

3.2、List 和 json 的互转

    @Test
    public void test2(){
        List<Person> personList = new ArrayList<>();
        personList.add(new Person(1, "郭新"));
        personList.add(new Person(2, "郭鹏"));

        Gson gson = new Gson();

        //将List集合转换成json字符串
        String personListJsonString = gson.toJson(personList);
        System.out.println(personListJsonString);//[{"id":1,"name":"郭新"},{"id":2,"name":"郭鹏"}]

        //将json字符串转换成List集合
        List<Person> list = gson.fromJson(personListJsonString, new PersonListType().getType());
        System.out.println(list);//[Person{id=1, name='郭新'}, Person{id=2, name='郭鹏'}]
        Person person = list.get(0);
        System.out.println(person);//Person{id=1, name='郭新'}
    }

注意:需要创建一个类去继承TypeToken类。

 

3.3、map 和 json 的互转

    @Test
    public void test3(){
        Map<Integer,Object> personMap = new HashMap<>();
        personMap.put(1, new Person(1, "郭新"));
        personMap.put(2, new Person(2, "郭鹏"));

        Gson gson = new Gson();
        //把Map集合转换成JSON字符串
        String personMapJsonString = gson.toJson(personMap);
        System.out.println(personMapJsonString);//{"1":{"id":1,"name":"郭新"},"2":{"id":2,"name":"郭鹏"}}

        //把JSON字符串转换成Map集合
        Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString, new TypeToken<HashMap<Integer,Person>>(){}.getType());
        System.out.println(personMap2);//{1={id=1.0, name=郭新}, 2={id=2.0, name=郭鹏}}

        Person p = personMap2.get(1);
        System.out.println(p);//Person{id=1, name='郭新'}
    }

匿名实现类的方式(不用创建类去继承TypeToken):

 

 

 
阅读(2419) 评论(0)