Json数据格式的使用

一.概念介绍

全称为:JavaScript Object Notation,JavaScript对象表示法。

用途:
1.json现在多用于存储和交换文本信息的语法
2.进行数据的传输
特点:
1.JSON 比 XML 更小、更快,更易解析。

二.语法介绍

1. 基本定义规则

* 数据在名称/值对中:json数据是由键值对构成的
	* 键用引号(单双都行)引起来,也可以不使用引号
	* 值得取值类型:
		1. 数字(整数或浮点数)
		2. 字符串(在双引号中)
		3. 逻辑值(truefalse4. 数组(在方括号中)	{"persons":[{},{}]}
		5. 对象(在花括号中) {"address":{"province""陕西"....}}
		6. null
* 数据由逗号分隔:多个键值对由逗号分隔
* 花括号保存对象:使用{}定义json 格式
* 方括号保存数组:[]

例子1:定义数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JSON演示</title>
</head>
<body>
    <script>
                <!--基本格式-->
        var person = {name:"jack","age":22,"gender":true};
        alert(person)
        <!--嵌套格式   {}->[]-->
        var persons = {persons:[ {name:"jack","age":22,"gender":true},
                {name:"rose" ,"age":21,"gender":false},
                {name:"tom","age":22,"gender":true}
                ]};
        
        alert(persons)
        <!--嵌套格式 []->{} -->
        var persons2 = [{name:"jack","age":22,"gender":true},
         {name:"tom","age":22,"gender":true}]
        alert(persons2)     
    </script>
</body>
</html>

在这里插入图片描述

2. 获取数据

1. json对象.键名
2. json对象["键名"]
3. 数组对象[索引]
4. 遍历

例子2:获取值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JSON演示</title>
</head>
<body>
    <script>
        <!--基本格式-->
        var person = {name:"jack","age":22,"gender":true};
        alert(person.name)
        alert(person["name"])
        <!--嵌套格式   {}->[]-->
        var persons = {persons:[ {name:"jack","age":22,"gender":true},
                {name:"rose" ,"age":21,"gender":false},
                {name:"tom","age":22,"gender":true}
                ]};
        alert(persons.persons[0].name)
        <!--嵌套格式 []->{} -->
        var persons2 = [{name:"jack","age":22,"gender":true}, {name:"tom","age":22,"gender":true}]
        alert(persons2[1].name)
    </script>
</body>
</html>

在这里插入图片描述
例子3:遍历取值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JSON演示</title>
</head>
<body>
    <script>
        <!--基本格式-->
        var person = {name:"jack","age":22,"gender":true};
        for(var key in person){
            alert(key+":"+person[key])
        }
    </script>
</body>
</html>

在这里插入图片描述

3. JSON数据和Java对象的相互转换

这一相互转换需要用到JSON解析器

常见的JSON解析器:Jsonlib,Gson,fastjson,jackson

要使用解析器,就得导入jar包,我们选择jackson:

链接:https://pan.baidu.com/s/1Gm5I6-SDds9J11kCQQDPcA
提取码:8j3a

I.Java对象转换JSON

接下来我们创建User类:

public class User {
    private String name;
    private int age;
    private Date birthday;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    
    public String toString() {
    return "User{" +
            "name='" + name + '\'' +
            ", age=" + age +
            ", birthday=" + birthday +
            '}';
}
}

测试代码1:

@Test
public void test() throws IOException {
	//1.创建User对象
	User user = new User();
	user.setAge(22);
	user.setName("jack");
	user.setBirthday(new Date());
	//2.创建jackson的核心对象 ObjectMapper
	ObjectMapper mapper = new ObjectMapper();
	//3.转换
	/* 转换方法:
	writeValue(参数1,obj):
	    参数1:
	    File:将obj对象转换为JSON字符串,并保存到指定的文件中
	    Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
	    OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
	writeValueAsString(obj):将对象转为json字符串
	*/
	String json = mapper.writeValueAsString(user);
	System.out.println(json);
	File file = new File("D://a.txt");
	mapper.writeValue(file,json);
}

在这里插入图片描述
在这里插入图片描述
上面的birthday是一串看不懂的数字,我们用(注解)来解决这个问题。

1. @JsonIgnore:排除属性。
2. @JsonFormat:属性值得格式化
例如: @JsonFormat(pattern = "yyyy-MM-dd")

在这里插入图片描述
再次运行:在这里插入图片描述
@JsonIgnore注解帮助我们把birthday未进行转化,但是我们不希望这样,于是我们先撤掉这个注解。使用@JsonFormat
在这里插入图片描述
在这里插入图片描述

II.JSON转为Java对象

测试代码:

public void test() throws IOException {
    String json = "{\"name\":\"jack\",\"age\":22,\"birthday\":1596299850579}";
    ObjectMapper mapper = new ObjectMapper();
    User user = mapper.readValue(json, User.class);
    System.out.println(user);
}

在这里插入图片描述
上面是简单对象的转换,对于Map集合与List集合,他们的结果会是下面形式:

1. List:数组
List<User> res = objectMapper.readValue(info,  new TypeReference<List<User>>(){});
2. Map:对象格式一致

4.使用Jquery实现js字符串与json对象互相转换

<script>
	//定义一个json对象
   var resData = {url:"123"}
   //json对象转为js字符串
   alert(JSON.stringify(resData))
   //js字符串转json对象
   var jsonObj = $.parseJSON('{url:"123"}');
   alert(jsonObj)
   alert(jsonObj["url"])
</script>

在这里插入图片描述
上面我们只探出了{"url":"123"},我闷本来预期的还有两个弹出,这是由于运行下面这一步的时候,'{url:"123"}'这样的串是无法转为json对象的,必须把url也用引号引起来:

   var jsonObj = $.parseJSON('{url:"123"}');

我们修改为{"url":"123"}继续测试:
在这里插入图片描述
不过这里有一个奇怪的现象就是:
$.parseJSON('{url:"123"}');可以成功,但是$.parseJSON("{'url':'23'}");却会报错,如果有大佬可以解答请在评论区留言。

  • 19
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值