JSON学习笔记

文章目录

    • 1.什么是JSON
    • 2.JSON的定义和访问
    • 3.json的两个常用方法
    • 4.JSON在Java中的使用

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 heretitle>
    <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学习笔记_第1张图片
说明json就是一个对象。
json的访问:json本身是一个对象,json中的key我们可以理解为对象中的一个属性,json中的key访问就跟访问对象的属性一样,json对象key
如:
访问key1:

alert(jsonObj.key1);

JSON学习笔记_第2张图片
访问key4

alert(jsonObj.key4);

JSON学习笔记_第3张图片
访问key5

 alert(jsonObj.key5);

JSON学习笔记_第4张图片
访问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);

结果如下:
在这里插入图片描述
JSON学习笔记_第5张图片
JSON学习笔记_第6张图片
JSON学习笔记_第7张图片

4.JSON在Java中的使用

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

<dependency>
      <groupId>com.google.code.gsongroupId>
      <artifactId>gsonartifactId>
      <version>2.2.4version>
    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>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.12version>
      <scope>providedscope>
    dependency>
 <dependency>      <groupId>com.google.code.gsongroupId>
      <artifactId>gsonartifactId>
      <version>2.2.4version>
    dependency>
    <dependency>
      <groupId>org.hamcrestgroupId>
      <artifactId>hamcrest-coreartifactId>
      <version>1.3version>
      <scope>testscope>
    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);
        //Listlist=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,结果如下:
JSON学习笔记_第8张图片
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方法,结果如下:
JSON学习笔记_第9张图片
在上面的实例中,我们每次都要创建一个类来继承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);
        //MappersonMap1=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);
    }

你可能感兴趣的:(笔记,java,json)