笔记大纲
- JSON简介
- JSON基本语法
- JS中JSON转换问题
- Java中JSON转换问题
- JSON对象转字符串案例
- JSON字符串转对象案例
- JAVA对象、JSON字符串转换案例(重点是Java集合类型)
1.JSON简介
AJAX在开始使用XML的数据格式,XML的数据格式非常简单清晰,容易编写,但是由于XML中包含了过多的标签,以及十分复杂的结构,解析起来也相对复杂,所以AJAX中已经几乎不使用XML来发送数据!取而代之的是一项新的技术JSON。
JSON:JavaScript Object Notation (js对象交换格式)的缩写,是JS提供的一种数据交换格式。
JSON对象本质上就是一个JS
对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言中进行传递,通过工具又可以转换为其他语言中的对象。
2.JSON基本语法
{key1:value1,key2:value2,key3:value3…}
创建JSON对象
(1)var json = {“name1”:”value1”,”name2”:”value2” , “name3”:[1,”str”,true]};
– 对象
(2)var json = [{“name1”:”value1”},{“name2”:”value2”}];
– 数组
3.JSON的基本数据类型(7种)
与javascript数据类型一致
数据类型 | 举例 | 注意事项 |
---|---|---|
字符串 | ”codinglin” | 不能使用单引号 |
数字 | 18.88 | |
布尔值 | true、false | |
null 值 | null | |
对象 | {“name”:”codinglin”, ”age”:18} | |
数组 | [1,”str”,true] | |
undefined | 未定义(没有赋值) |
3.JS中JSON转换问题
转换方式 | 调用方法 |
---|---|
JSON 对象–>JSON 字符串 | JSON.stringify(JSON对象) |
JSON 字符串–>JSON 对象 | JSON.parse(JSON字符串) |
4.Java中JSON转换问题
在Java中可以从文件中读取JSON字符串,也可以是客户端发送的JSON字符串, 解析JSON字符串我们需要导入第三方的工具,目前主流的解析JSON的工具大概有三种json-lib、jackson、gson。三种解析工具相比较json-lib的使用复杂,且效率较差。而
Jackson
和gson
解析效率较高。使用简单,下面我用的是Google的gson
工具!Gson中解析JSON的核心类是Gson,解析操作都是通过该类实例进行。
转换方式 | 调用方法 |
---|---|
JAVA 对象>JSON 字符串 | toJson() |
JSON 字符串->JAVA 对象 | fromJson(String str,Class clazz) fromJson(String str,Type type) |
注意:使用fromJson(String str,Type type)
这种方式时,要使用匿名内部类的知识!
----gson.fromJson(jsonStr,new TypeToken<list>(){}.getType());
5.JSON对象转字符串案例
例如:JSON对象:
{“name”:”codinglin” , ”age”:18 , ”address”:”beijing” }
这个对象中有三个属性name、age和address,如果将该对象使用单引号引起了,那么他就变成了一个字符串:
‘{“name”:”codinglin” , ”age”:18 , ”address”:”beijing” }’
变成字符串后有一个好处,就是可以在不同语言之间传递
(1)javascript代码
<script type="text/javascript" src="static/script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function(){
//json对象
var jsonObj ={"name1":"value1","name2":"value2","name3":[1,"str",true]};
var jsonStr = JSON.stringify(jsonObj);
alert(jsonStr)
(2)网页界面
6.JSON字符串转对象案例
(1)javascript代码
<script type="text/javascript" src="static/script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function(){
//json字符串
var jsonStr ='{"name1":"value1","name2":"value2","name3":[1,"str",true]}';
var StrTrObj = JSON.parse(jsonStr);
alert(StrTrObj.name3)
})
</script>
(2)网页界面
json字符串—>json对象,可以看出name3是一个数组类型
7.JAVA对象、JSON字符串转换案例
7.1.java对象是引用类型
(1)MyBlog类
public class MyBlog {
private String name;
private int age;
private String adress;
public MyBlog() {
super();
}
public MyBlog(String name, int age, String adress) {
super();
this.name = name;
this.age = age;
this.adress = adress;
}
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 String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}
@Override
public String toString() {
return "MyBlog [name=" + name + ", age=" + age + ", adress=" + adress + "]";
}
(2)GsonTest测试类
注意:导包!
package com.codinglin.servlet;
import org.junit.jupiter.api.Test;
import com.google.gson.Gson;
public class GsonTest {
Gson gson = new Gson();
@Test
public void testMyBlog() {
//(1)java对象---json字符串
MyBlog myBlog = new MyBlog("lindaxia",1,"CSDN");
String jsonStr = gson.toJson(myBlog);
System.out.println(jsonStr);
// {"name":"lindaxia","age":1,"adress":"CSDN"}
//(2)json字符串---java对象
MyBlog myBlog2 = gson.fromJson(jsonStr,MyBlog.class);
System.out.println(myBlog2);
//MyBlog [name=lindaxia, age=1, adress=CSDN]
System.out.println(myBlog2.getName()); //lindaxia
}
}
7.2.java对象是List类型
@Test
public void testMyBlogList() {
List<MyBlog> list = new ArrayList<>();
list.add(new MyBlog("lindaxia1",1,"CSDN1"));
list.add(new MyBlog("lindaxia2",2,"CSDN2"));
list.add(new MyBlog("lindaxia3",3,"CSDN3"));
//(1)Java-list转为Json字符串
String jsonStr = gson.toJson(list);
System.out.println(jsonStr); //数组
/*[{"name":"lindaxia1","age":1,"adress":"CSDN1"},
{"name":"lindaxia2","age":2,"adress":"CSDN2"},
{"name":"lindaxia3","age":3,"adress":"CSDN3"}]*/
//(2)Json字符串转为Java-list
List<MyBlog> list2 = gson.fromJson(jsonStr, new TypeToken<List<MyBlog>>() {}.getType());
System.out.println(list2);
/*[MyBlog [name=lindaxia1, age=1, adress=CSDN1],
MyBlog [name=lindaxia2, age=2, adress=CSDN2],
MyBlog [name=lindaxia3, age=3, adress=CSDN3]]*/
System.out.println(list2.get(0).getName()); //lindaxia1
}
7.3.java对象是Map类型
@Test
public void testMyBlogMap() {
Map<String, MyBlog> map = new HashMap<>();
map.put("id1", new MyBlog("lindaxia1", 1, "CSDN1"));
map.put("id2", new MyBlog("lindaxia2", 2, "CSDN2"));
map.put("id3", new MyBlog("lindaxia3", 3, "CSDN3"));
// (1)Java-map转为Json字符串
String jsonStr = gson.toJson(map);
System.out.println(jsonStr); // 数组
/*{"id2":{"name":"lindaxia2","age":2,"adress":"CSDN2"},
"id1":{"name":"lindaxia1","age":1,"adress":"CSDN1"},
id3":{"name":"lindaxia3","age":3,"adress":"CSDN3"}}
*/
// (2)Json字符串转为Java-map
Map<String, MyBlog> map2 = gson.fromJson(jsonStr, new TypeToken<Map<String, MyBlog>>() {
}.getType());
System.out.println(map2);
/*{id2=MyBlog [name=lindaxia2, age=2, adress=CSDN2],
id1=MyBlog [name=lindaxia1, age=1, adress=CSDN1],
id3=MyBlog [name=lindaxia3, age=3, adress=CSDN3]}*/
System.out.println(map2.get("id1").getName()); //lindaxia1
}
☝上述分享来源个人总结,如果分享对您有帮忙,希望您积极转载;如果您有不同的见解,希望您积极留言,让我们一起探讨,您的鼓励将是我前进道路上一份助力,非常感谢!我会不定时更新相关技术动态,同时我也会不断完善自己,提升技术,希望与君同成长同进步!
☞本人博客:https://coding0110lin.blog.csdn.net/ 欢迎转载,一起技术交流吧!