博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Json数据格式的使用
阅读量:3959 次
发布时间:2019-05-24

本文共 2962 字,大约阅读时间需要 9 分钟。

Json数据格式的使用

一.概念介绍

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

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

二.语法介绍

1. 基本定义规则

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

例子1:定义数据

    
JSON演示

在这里插入图片描述

2. 获取数据

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

例子2:获取值

    
JSON演示

在这里插入图片描述

例子3:遍历取值

    
JSON演示

在这里插入图片描述

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:

@Testpublic 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
res = objectMapper.readValue(info, new TypeReference
>(){
});2. Map:对象格式一致

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

在这里插入图片描述

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

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

我们修改为{"url":"123"}继续测试:

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

转载地址:http://vxlzi.baihongyu.com/

你可能感兴趣的文章