JSON小述

一、JSON是什么

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易与人阅读和编写,同时易于机器解析和生成,json采用完全独立语言的文本格式,而且很多语言都提供了对json的支持(包括c、c++、c#、java、python等),这样就使得json成为理想的数据交换格式。

轻量级指的是跟xml作比较

数据交换指的是客户端和服务器之间业务数据的传递格式

二、JSON在JavaScript中的使用

1、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、json的访问

json本身是一个对象

json中的key我们可以理解为是对象中的一个属性

json中的key访问就跟访问对象的属性一样:json对象.key

// json的访问
			//alert(jsonObj.key1)
			//alert(jsonObj.key2)
			//alert(jsonObj.key3)
			//alert(jsonObj.key4)//得到数组[11,arr,false]

			// json中数组值的遍历
			/*for (var i = 0;i < jsonObj.key4.length;i++){
				alert(jsonObj.key4[i])//11,arr,false
			}*/

			//alert(jsonObj.key5.key5_1)//551
			//alert(jsonObj.key5.key5_2)//key5_2_value

			// alert(jsonObj.key6)
			//alert(jsonObj.key6[1].key6_2_1)//6621
			alert(jsonObj.key6[1].key6_2_2)//key6_2_2_value
3、JSON的两个常用方法

json的存在有两种形式:

  • 一种是对象的形式存在,我们叫它json对象

  • 一种是字符串的形式存在,我们叫它json字符串

  • 一般我们要操作json中的数据的时候,需要json对象的格式

  • 一般我们要在客户端和服务器之间进行数据交换的时候,使用json字符串

    JSON.stringify() 把json对象转换成为json字符串

    JSON.parse() 把json字符串转换成为json对象

//json对象转字符串
			//alert(jsonObj);
			var jsonObjString = JSON.stringify(jsonObj)//转换结果特别像java中对象的toString
			//alert(jsonObjString)

			// json字符串转json对象
			var jsonObj2 = JSON.parse(jsonObjString)
			//alert(jsonObj2)
			alert(jsonObj2.key1)//12

json对象转json字符串结果:

{"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"}]}

json字符串转json对象结果:

[object Object]

三、JSON在java中的使用

先导入需要的jar包

gson-2.2.4.jar junit-4.12.jar gson-2.2.4.jar

1、javabean和json的互转

先创建一个javabean对象

package com.zjj.pojo;

public class Person {

    private Integer id;

    private String name;

    public Person() {
    }

    public Person(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

实现互转

package com.zjj.json;

import com.google.gson.Gson;
import com.zjj.pojo.Person;
import org.junit.Test;

public class JsonTest {

    //javabean和json的互转
    @Test
    public void test1(){
        Person person = new Person(1, "zhangsan");

        //创建gson对象实例
        Gson gson = new Gson();

        //toJson方法可以把java对象转换成为Json字符串
        String personJsonString = gson.toJson(person);
        System.out.println(personJsonString);

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

结果:

{"id":1,"name":"zhangsan"}
Person

2、list和json的互转

写一个类继承gson-2.2.4.jar包的typeToken类(需要接收一个泛型,转换回去的具体类型)

package com.zjj.json;

import com.google.gson.reflect.TypeToken;
import com.zjj.pojo.Person;

import java.util.ArrayList;

public class PersonListType extends TypeToken<ArrayList<Person>> {
}

json字符串转换回集合必须使用Type类型

package com.zjj.json;

import com.google.gson.Gson;
import com.zjj.pojo.Person;
import org.junit.Test;

public class JsonTest {

    //list和json的互转
    @Test
    public void test2() {
        List<Person> personList = new ArrayList<Person>();

        personList.add(new Person(1, "zhangsan"));
        personList.add(new Person(2, "wangwu"));

        Gson gson = new Gson();
        //把list转换为json字符串
        String personListJsonString = gson.toJson(personList);
        System.out.println(personListJsonString);

        //List list = gson.fromJson(personListJsonString, personList.getClass());
        //System.out.println(list);

        //报错:java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap 					cannot be cast to com.zjj.pojo.Person
        //Person person = (Person) list.get(0);
        //System.out.println(person);

        List list = gson.fromJson(personListJsonString, new PersonListType().getType());
        System.out.println(list);

        Person person = (Person) list.get(0);
        System.out.println(person);
    }
}

输出:

[{"id":1,"name":"zhangsan"},{"id":2,"name":"wangwu"}]
[Person{id=1, name='zhangsan'}, Person{id=2, name='wangwu'}]
Person

3、map和json的互转
package com.zjj.json;

import com.google.gson.Gson;
import com.zjj.pojo.Person;
import org.junit.Test;

public class JsonTest {

    @Test
    public void test3() {
        Map<Integer,Person> personMap = new HashMap<Integer,Person>();

        personMap.put(1, new Person(1, "zhangsan"));
        personMap.put(2, new Person(2, "wangwu"));

        Gson gson = new Gson();

        //把Map集合转换为json字符串
        String personMapJsonString = gson.toJson(personMap);
        System.out.println(personMapJsonString);

        Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString, new PersonListType().getType());
        System.out.println(personMap2);
    }
}

结果:

{"1":{"id":1,"name":"zhangsan"},"2":{"id":2,"name":"wangwu"}}

注意
  • json字符串转换回javabean对象使用class类型就可以了
  • json字符串转换回集合必须使用Type类型

gson对象.fromJson()方法的参数:

posted @ 2020-12-16 19:06  向PO前  阅读(71)  评论(0)    收藏  举报