JSON学习笔记

29 篇文章 0 订阅

1.什么是JSON

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

2.JSON的定义和访问

json的定义:json是有键值对组成,并且由花括号(大括号)包围,每个键由引号引起来,键和值之间使用冒号进行分隔,多组键值对之间使用逗号进行分隔。
我们创建一个json.html,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="pragma" content="no-cache"/>
    <meta http-equiv="cache-control" content="no-cache"/>
    <meta http-equiv="Expires" content="0" />
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript">
        //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"
            }]
        };
        alert(typeof(jsonObj));
    </script>
</head>
<body>

</body>
</html>

打开这个html,结果如下:
在这里插入图片描述
说明json就是一个对象。
json的访问:json本身是一个对象,json中的key我们可以理解为对象中的一个属性,json中的key访问就跟访问对象的属性一样,json对象key
如:
访问key1:

alert(jsonObj.key1);

在这里插入图片描述
访问key4

alert(jsonObj.key4);

在这里插入图片描述
访问key5

 alert(jsonObj.key5);

在这里插入图片描述
访问key5中的key5_1

alert(jsonObj.key5.key5_1);

在这里插入图片描述

3.json的两个常用方法

JSON的存在有两种形式:一种是对象的形式存在,我们叫它json对象;一种是,字符串的形式存在,我们叫它json字符串
一般我们要操作json中的数据时,需要json对象的格式,在客户端和服务器之间进行数据交换时,使用json字符串

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

我们修改json.html代码

  var jsonObjString=JSON.stringify(jsonObj);//特别像Java中对象的toString
        alert(jsonObjString);
        //把json字符串转换成为json对象
        var jsonObj2=JSON.parse(jsonObjString);
        alert(jsonObj2);
        alert(jsonObj2.key1);

结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.JSON在Java中的使用

我们先导包,在pom.xml中添加如下代码,导入gson的jar包

<dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.2.4</version>
    </dependency>

创建一个包,用来演示JSON在Java中的使用,我们假设这个包名为:
com.atguigu.pojo
1.JavaBean和json的转换
创建一个包,名为com.atguigu.json,在pojo软件包下创建一个Person.java

package com.atguigu.pojo;

public class Person {
    private Integer id;
    private String name;
    public void setId(Integer id){
        this.id=id;
    }
    public Integer getId(){
        return this.id;
    }
    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return this.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+"\'"+
                "}";
    }
}

我们在pom.xml下导入Gson、Junit和hamcrest-core依赖

 <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>provided</scope>
    </dependency>
 <dependency>      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.2.4</version>
    </dependency>
    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-core</artifactId>
      <version>1.3</version>
      <scope>test</scope>
    </dependency>```

然后在json包下写一个测试的类JsonTest.java
```java
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,"HelloWorld");
        //创建Gson对象实例
        Gson gson=new Gson();
        //toJson方法可以把java对象转换称为字符串
        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);
    }

}

测试我们的test1方法,结果如下:
在这里插入图片描述
2.List和json的转换
我们在JsonTest.java中添加test2方法,代码如下:

//2.List和json的转换
    @Test
    public void test2(){
        List<Person>personList=new ArrayList<Person>();
        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);
        List<Person>list=gson.fromJson(personListJsonString,personList.getClass());
        System.out.println(list);
        Person person=list.get(0);
        System.out.println(person);
    }

测试test2,结果如下:
在这里插入图片描述
错误提示信息称无法将Map类型转换为Person
我们在com.atguigu.json软件包下创建一个PersonListType.java,代码如下:

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

修改JsonTest.java的test2方法

 //2.List和json的转换
    @Test
    public void test2(){
        List<Person>personList=new ArrayList<Person>();
        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);
        //List<Person>list=gson.fromJson(personListJsonString,personList.getClass());
        List<Person>list=gson.fromJson(personListJsonString,new PersonListType().getType());
        System.out.println(list);
        Person person=list.get(0);
        System.out.println(person);
    }

运行test2,结果如下:
在这里插入图片描述
3.map和json的转换
我们先在com.atguigu.json软件包下创建一个PersonMapType.java,代码如下:

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

在JsonTest.java添加test3方法,代码如下:

//3.map和json的转换
    @Test
    public void test3(){
        Map<Integer,Person>personMap=new HashMap<Integer, Person>();
        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);
        Map<Integer,Person>personMap1=gson.fromJson(personMapJsonString,new PersonMapType().getType());
        System.out.println(personMap1);
        Person p=personMap1.get(1);
        System.out.println(p);
    }

运行test3方法,结果如下:
在这里插入图片描述
在上面的实例中,我们每次都要创建一个类来继承TypeToken,这很浪费空间,我们可以使用匿名类的方法。代码如下:

//3.map和json的转换
    @Test
    public void test3(){
        Map<Integer,Person>personMap=new HashMap<Integer, Person>();
        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);
        //Map<Integer,Person>personMap1=gson.fromJson(personMapJsonString,new PersonMapType().getType());
        Map<Integer,Person>personMap1=gson.fromJson(personMapJsonString,new TypeToken<HashMap<Integer,Person>>(){}.getType());
        System.out.println(personMap1);
        Person p=personMap1.get(1);
        System.out.println(p);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值