JSON

1.JSON概述

  • JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
  • 它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集,它利用了JavaScript的一些模式来表示结构化数据。
  • 它是一种数据格式,而非编程语言
  • Json并不从属于JavaScript。很多编程语言都有针对Json的解析器

2.JSON使用

2.1 JS声明对象

Java语言
在这里插入图片描述在这里插入图片描述
JS语言
在这里插入图片描述

2.2 对象中包含对象

Java语言
在这里插入图片描述
在这里插入图片描述

JS语言
在这里插入图片描述
在这里插入图片描述

2.3 对象里包含数组或集合

Java语言
在这里插入图片描述
在这里插入图片描述

JS语言
在这里插入图片描述
在这里插入图片描述

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        var person = {name:"zsss", age:20};
        console.log(person.name)
        console.log(person.age)

        var person2 = {name:"sss", age:22,info:{address:"武汉",email:"222@qq.com"}}
        console.log(person2.info.address)

        var country = {name:"中国", province:[{name:"黑龙江", cities:["哈尔滨","大庆"]},
                {name:"湖北省", citise:["武汉","荆州"]},
                {name:"台湾省", cities:["台北", "高雄"]}]}

        console.log(country.province[2].cities[0])
        console.log(country.province[0].cities[0])

    </script>
</head>
<body>

</body>
</html>

在这里插入图片描述

2.4 JSON数据格式VS XML数据格式

json字符串,可以认为是java中的toString

var pro ={
            "name":"中国",
             "province":[{"name":"黑龙江",”cities”:["哈尔滨","大庆"]},
		          {"name":"广东","cities":["广州","深圳","珠海"]},
		          {"name":"台湾","cities":["台北","高雄"]},
		          {"name":"新疆","cities":["乌鲁木齐"]}
                                   ]
                   }
alert(pro.province[0].cities.city[1]);

XML格式:

<?xml version="1.0"encoding="utf-8"?>
<country>
    <name>中国</name>
    <province>
        <name>黑龙江</name>
        <cities>
            <city>哈尔滨</city>
            <city>大庆</city>
        </cities>
    </province>
    <province>
        <name>广东</name>
        <cities>
            <city>广州</city>
            <city>深圳</city>
            <city>珠海</city>
        </cities>
    </province>
    <province>
        <name>台湾</name>
        <cities>
            <city>台北</city>
            <city>高雄</city>
        </cities>
    </province>
    <province>
        <name>新疆</name>
        <cities>
            <city>乌鲁木齐</city>
        </cities>
    </province>
</country>

2.5 数据格式比较

2.5.1 可读性

JSONXML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。

2.5.2 可扩展性

  • XML天生有很好的扩展性,JSON当然也有,没有什么是XML可以扩展而JSON却不能扩展的。
  • 解码难度:XML的解析方式有两种:一是通过文档模型解析。另外一种方法是遍历节点;但对于JSON,如果事先知道结构的情况下,使用JSON进行数据传递简直是太美妙了,可以写出很实用美观可读性强的代码
  • 数据效率:JSON作为数据包格式传输的时候具有更高的效率,这是因为JSON不像XML那样需要有严格的闭合标签,这就让有效数据量与总数据包比大大提升,从而减少同等数据流量的情况下,网络的传输压力

3.Java语言操纵JSON

3.1 其他类型数据生成json字符串

String json = "{\"id\":\"" + user.getName() + "\",\"id\":\"" + user.getPassword() + "\"}";

较复杂

JSON在线工具:
https://www.bejson.com/
在这里插入图片描述
JSON转Java实体类:
在这里插入图片描述

3.2 Jackson可实现Java对象和JSON字符串互换

3.2.1 工具类,可实现java对象和json字符串的相互转换。

gson—google

fastjson----alibaba

1.在Maven中导包
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cskaoyan.28ee</groupId>
    <artifactId>json</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.12.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.12.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

2.创建Javabean对象
加上set、get、tostring

public class User {
    private String usename;
    private String password;
    }

3.写测试类
Java实体类转json,法一:(传统方法)

@Test
    public void testObjectToJsonStr(){
        User user = new User();
        user.setUsename("admin");
        user.setPassword("1234");
        //将该user对象转成json字符串
        //js其实非常喜欢json字符串形式地数据
        //很轻松的将json字符串转成对应的json对象 vue 双向绑定
        // var user = {"username":"admin","password":"1234"}
        String jsonStr = "{\"username\":\"" + user.getUsename() + "\",\"password\":\"" + user.getPassword() + "\"}";
        System.out.println(jsonStr);

在这里插入图片描述
Java实体类转json,法二:(工具类)

    @Test
    public void testObjectToJsonStr3() throws JsonProcessingException {
        User user = new User();
        user.setUsename("admin");
        user.setPassword("1234");

        User user2 = new User();
        user2.setUsename("admin");
        user2.setPassword("1234");

        List<User> users = new ArrayList<User>();
        users.add(user);
        users.add(user2);
        ObjectMapper mapper = new ObjectMapper();
        String s = mapper.writeValueAsString(users);
        System.out.println(s);
    }

在这里插入图片描述
json转Java实体类:法一(传统)

    @Test
    public void testJsonStrToObject() throws JsonProcessingException {
        String userStr ="{\"usename\":\"admin\",\"password\":\"1234\"}";
        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(userStr, User.class);
        System.out.println(user);
    }

在这里插入图片描述
json转Java实体类:法二(带有集合形式的json字符串,将其转成List形式)

 @Test
    public void testJsonStrToObject2() throws JsonProcessingException {
        String userStr = "[{\"usename\":\"admin\",\"password\":\"1234\"},{\"usename\":\"admin\",\"password\":\"1234\"}]";
        ObjectMapper mapper = new ObjectMapper();
        //如果处理这种带有集合形式的json字符串,将其转成List<Object>形式
        //可以使用另外一个对象来协助完成
        //创建一个类型工厂
        TypeFactory typeFactory = mapper.getTypeFactory();
        //创建结构集合类型
        CollectionType collectionType = typeFactory.constructCollectionType(List.class, User.class);
       List<User> o = mapper.readValue(userStr, collectionType);
        for (User user : o) {
            System.out.println(user);
        }
    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值