JSON
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
JSON 是轻量级的文本数据交换格式
JSon 在线文档:https://www.w3school.com.cn/js/js_json_intro.asp
JSON 的定义格式
var 变量名 = {
"k1" : value, // Number 类型
"k2" : "value", // 字符串类型
"k3" : [], // 数组类型
"k4" : {}, // json 对象类型
"k5" : [{},{}] // json 数组
};
快速入门
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="jquery-3.7.1.js" type="text/javascript"></script>
<script type="text/javascript">
var myJson = {
"key1": "lxg", // 字符串
"key2": 123, // Number
"key3": [1, "hello", 2.3], // 数组
"key4": {"age": 12, "name": "jack"}, //json 对象
"key5": [ //json 数组
{"k1": 10, "k2": "milan"}, {"k3": 30, "k4": "smith"}
]
};
//访问 json 的属性
console.log("key1= " + myJson.key1);
// 访问 json 的数组属性
console.log("key3[1]= " + myJson.key3[1]); // hello
// 访问 key4 的 name 属性
console.log("name= " + myJson.key4.name); // jack
// 访问 key5 json 数组的第一个元素
console.log("myJson.key5[0]= " + myJson.key5[0]); //[object, object]
console.log("myJson.key5[0].k2= " + myJson.key5[0].k2)// milan
</script>
</head>
<body>
</body>
</html>
JSON 对象和字符串对象转换
JSON.stringify(json)功能:将一个 json 对象转换成为 json 字符串
JSON.parse( jsonString )功能:将一个 json 字符串转换成为 json 对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="jquery-3.7.1.js" type="text/javascript"></script>
<script type="text/javascript">
var myJson = {
"name": "xxx"
};
console.log(myJson)
var s = JSON.stringify(myJson)
console.log(s)
var myJson1 = JSON.parse(s)
console.log(myJson1)
</script>
</head>
<body>
</body>
</html>
注意事项:
- JSON.springify(json 对象) 会返回对应 string,并不会影响原来 json 对象
- JSON.parse(string) 函数会返回对应的 json 对象,并不会影响原来 string
- 在定义 Json 对象时, 可以使用 ’ ’ 表示字符串,比如
var json_person = {"name": "jack", "age": 100}
,也可以写成var json_person = {'name': 'jack', 'age': 100}
- 但是在把原生字符串转成 json 对象时,必须使用 “”,否则会报错 比如:var str_dog = “{‘name’:‘小黄狗’, ‘age’: 4}”; 转 json 就会报错
- JSON.springify(json 对象)返回的字符串, 都是 “” 表示的字符串, 所以在语法格式正确的情况下, 是可以重新转成 json 对象的
JSON 在 java 中使用
java 中使用 json,需要引入到第 3 方的包 gson.jar
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以对 JSON 字符串和 Java 对象相互转换
创建JavaBean:
public class Monster {
private Integer id;
private String name;
private String skill;
public Monster(Integer id, String name, String skill) {
this.id = id;
this.name = name;
this.skill = skill;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSkill() {
return skill;
}
public void setSkill(String skill) {
this.skill = skill;
}
}
JSON与java对象的转换
import com.google.gson.Gson;
public class test {
public static void main(String[] args) throws Exception {
Gson gson = new Gson();
Monster monster = new Monster(100, "小火龙", "喷火");
// 将java对象转换成json字符串
String json = gson.toJson(monster);
System.out.println(json);
// 将json字符串转换成java对象
Monster monster1 = gson.fromJson(json, Monster.class);
System.out.println(monster1);
}
}
JSON与List集合的转换
public class test03 {
public static void main(String[] args) throws Exception {
Gson gson = new Gson();
ArrayList<Monster> monsters = new ArrayList<>();
monsters.add(new Monster(100, "小火龙", "喷火"));
monsters.add(new Monster(100, "稻草人", "恐惧"));
// 将List集合转换成JSON字符串
String json = gson.toJson(monsters);
System.out.println(json);
// 将JSON字符串转换成List集合
Object o = gson.fromJson(json, new TypeToken<List<Monster>>() {}.getType());
System.out.println(o);
}
}
其中TypeToken<List<Monster>>() {}
为匿名内部类,用于保存集合元素的类型(因为程序运行时无法直接得到list中元素的具体类型,需要通过匿名子类间接获取)。
JSON与Map的转换
public static void main(String[] args) throws Exception {
Gson gson = new Gson();
Map<String, Monster> map = new HashMap<>();
map.put("1", new Monster(100, "小火龙", "喷火"));
map.put("2", new Monster(100, "稻草人", "恐惧"));
// 将Map转换成JSON字符串
String json = gson.toJson(map);
System.out.println(json);
// 将JSON字符串转换成Map
Object o = gson.fromJson(json,
new TypeToken<Map<String, Monster>>(){}.getType());
System.out.println(o);
}
}