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:定义数据
<!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")
再次运行:
@JsonIgnor
e注解帮助我们把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'}");
却会报错,如果有大佬可以解答请在评论区留言。