JSON笔记

JSON介绍

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。JSON采用完全独立于语言的文本格式,很多语言都提供对json的支持(c, c++, c#, java, javascript, Perl, Python等)
json是一种轻量级的数据交换格式。

轻量级:跟xml比较
数据交换:客户端和服务器之间业务数据的传递格式

JSON在Javascript中的使用

json的定义

json是由 键 值 对 \textcolor{red}{键值对} 组成,由 花 括 号 ( 大 括 号 ) \textcolor{red}{花括号(大括号)} 包围。每个键值对由 引 号 \textcolor{red}{引号} 引起来, 键 和 值 之 间 \textcolor{red}{键和值之间} 冒 号 \textcolor{red}{冒号} 进行隔离, 多 组 键 值 对 之 间 \textcolor{red}{多组键值对之间} 进行 逗 号 \textcolor{red}{逗号} 分隔
实例:

<html>
<head>
	<script type = "text/javascript">
    //json的定义
    var jsonObj = {
      "key1":12,
      "key2":"abc",
      "key3":trus,
      "key4":[11, "abc", false],
      "ket5":{
          "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"
      }]
    };
	</script>  
</head>
<body>
</body>
</html>

json的访问

json本身是一个对象
json中的key可以理解为属性
json中的key访问如同访问对象的属性一样:json对象.key
实例:

<script type = "text/javascript">
        //json的定义
        var jsonObj = {
            "key1":12,
            "key2":"abc",
            "key3":true,
            "key4":[11, "abc", false],
            "ket5":{
                "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"
            }]
        };
        // alert(typeof(jsonObj)); //Object json就是一个对象
        //json的访问
        // alert(jsonObj.key1);//12
        // alert(jsonObj.key2);//abc
        // alert(jsonObj.key3);//true
        // alert(jsonObj.key4);//得到数组[11, "abc", 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
    </script>

json的两个常用方法

json的存在形式

有两种:
1.对象的形式存在:json对象
2.字符串的形式存在:json字符串
这两种存在形式可以相互转换,方法如下:

JSON.stringify()

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

JSON.parse()

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

使用场景:
1.操作json中的数据时:需要json对象的格式
2.在客户端和服务器之间进行数据交换时:使用json字符串

注意:
JSON.xxx()方法中JSON是大写的

实例:

<script type = "text/javascript">
        //json的定义
        var jsonObj = {
            "key1":12,
            "key2":"abc",
            "key3":true,
            "key4":[11, "abc", false],
            "ket5":{
                "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"
            }]
        };
        // alert(typeof(jsonObj)); //Object json就是一个对象

        //json的访问
        // alert(jsonObj.key1);//12
        // alert(jsonObj.key2);//abc
        // alert(jsonObj.key3);//true
        // alert(jsonObj.key4);//得到数组[11, "abc", 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

        // alert(jsonObj);

        //json对象转字符串
        var jsonObjString = JSON.stringify(jsonObj);//像java的toString方法
        //alert(jsonObjString);

        //json字符串转json对象
        var jsonObj2 = JSON.parse(jsonObjString);
        alert(jsonObj2);
        alert(jsonObj2.key1);//12
        alert(jsonObj2.key2);//abc
    </script>

JSON在Java中的使用

使用json,需要导入jar包:gson-2.2.4.jar
在这里插入图片描述

Gson

创建Gson对象实例:

Gson gson = new Gson();

toJson方法可以把java对象转换为json字符串

String personJsonString = gson.toJson(java对象);

Gson中的fromJson:把json字符串转换为java对象

第一个参数为json字符串

第二个参数是转换回去的java对象类型

Gson对象.fromJson(json字符串, 转换回去的java对象类型)
//例子
gson.fromJson(personJsonString, Person.class)

方法总结:
1.xxx转换为json:
1)创建Gson对象

Gson Gson对象名 = new Gson();

2)使用Gson的toJson方法

String 字符串名 = Gson对象名.toJson(xxx对象名);

2.json转换为xxx:
使用Gson的fromJson方法

 xxx xxx对象名 = Gson对象名.fromJson(json字符串, xxx类型)

注意:
1.若xxx为javaBean时:

 xxx xxx对象名 = gson.fromJson(json字符串名, xxx.class);

2.若xxx为List、Map时:
方法1:
1)创建类型转换的类

//List
public class 类名 extends TypeToken<ArrayList<数据类型, 对象类型>> {}
//Map
public class 类名 extends TypeToken<HashMap<数据类型, 对象类型>> {}

2.调用

xxx xxx对象名 = gson.fromJson(json字符串名, new 类名.getType());

方法2:使用匿名内部类

xxx xxx对象名 = gson.fromJson(personMapJsonString, new TypeToken<HashMap<数据类型, 对象类型>>(){}.getType());

JavaBean 和 json 的互转

实例:

package com.atguigu.pojo;

public class Person {
    private Integer id;
    private String 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;
    }

    public Person(){

    }

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

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
package com.atguigu.json;
import com.atguigu.pojo.Person;
import com.google.gson.Gson;
import org.junit.Test;

public class JsonTest {
//    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);

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

在这里插入图片描述

List 和 json 的互转

实例:

package com.atguigu.pojo;

public class Person {
    private Integer id;
    private String 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;
    }

    public Person(){

    }

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

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

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

import java.util.ArrayList;

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

}
package com.atguigu.json;
import com.atguigu.pojo.Person;
import com.google.gson.Gson;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;

public class JsonTest {
//    2.List和json的互转
    @Test
    public void test2(){
        List<Person> personList = new ArrayList<>();
        personList.add(new Person(1, "猫猫"));
        personList.add(new Person(2, "狗狗"));
        //创建Gson对象实例
        Gson gson = new Gson();
        //把List转换为json字符串
        System.out.println("把List转换为njson字符串:");
        String personListJsonString = gson.toJson(personList);
        System.out.println(personListJsonString);
        //将json字符串转换为List
        System.out.println("将json字符串转换为List:");
        List<Person> list = gson.fromJson(personListJsonString, new PersonListType().getType());
        System.out.println(list);
        Person person = list.get(0);
        System.out.println(person);
    }
}

在这里插入图片描述

Map 和 json 的互转

实例:

package com.atguigu.pojo;

public class Person {
    private Integer id;
    private String 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;
    }

    public Person(){

    }

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

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
package com.atguigu.json;
import com.atguigu.pojo.Person;
import com.google.gson.reflect.TypeToken;
import java.util.HashMap;

public class PersonMapType extends TypeToken<HashMap<Integer, Person>> {

}
package com.atguigu.json;
import com.atguigu.pojo.Person;
import com.google.gson.Gson;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class JsonTest {
   
//    3.Map和json的互转
    @Test
    public void test3(){
        Map<Integer, Person> personMap = new HashMap<>();
        personMap.put(1, new Person(1, "猫猫"));
        personMap.put(2, new Person(2, "狗狗"));
        //创建Gson对象实例
        Gson gson = new Gson();
        //把Map转换为json字符串
        System.out.println("把Map转换为json字符串:");
        String personMapJsonString = gson.toJson(personMap);
        System.out.println(personMapJsonString);
        //将json字符串转换为Map
        System.out.println("将json字符串转换为Map:");
        Map<Integer, Person> map = gson.fromJson(personMapJsonString, new PersonMapType().getType());
        System.out.println(map);
        Person person = map.get(1);
        System.out.println(person);
    }
}

在这里插入图片描述

优化:类型转换,不需要在单独创建类,使用匿名内部类

package com.atguigu.json;
import com.atguigu.pojo.Person;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class JsonTest {

//    3.Map和json的互转
    @Test
    public void test3(){
        Map<Integer, Person> personMap = new HashMap<>();
        personMap.put(1, new Person(1, "猫猫"));
        personMap.put(2, new Person(2, "狗狗"));
        //创建Gson对象实例
        Gson gson = new Gson();
        //把Map转换为json字符串
        System.out.println("把Map转换为json字符串:");
        String personMapJsonString = gson.toJson(personMap);
        System.out.println(personMapJsonString);
        //将json字符串转换为Map
        System.out.println("将json字符串转换为Map:");
//        Map<Integer, Person> map = gson.fromJson(personMapJsonString, new PersonMapType().getType());
        Map<Integer, Person> map = gson.fromJson(personMapJsonString, new TypeToken<HashMap<Integer, Person>>(){}.getType());

        System.out.println(map);
        Person person = map.get(1);
        System.out.println(person);
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值