* json现在多用于存储和交换文本信息的语法
* 进行数据的传输
* JSON 比 XML 更小、更快,更易解析。
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON 采用完全独立于语言的文本格式,而且很多语言都提供了对 json 的支持(包括 C, C++, C#, Java, JavaScript, Perl, Python 等)。 这样就使得 JSON 成为理想的数据交换格式。
这是在java当中封装一些零散的信息,我们通过p对象来封装
Person p = new Person();
p.setName(“张三”);
p.setAge(23);
p.setGender(“男”);
那么我们想要在JavaScript当中也来封装一些零散的数据怎么实现呢?
提供json数据格式来实现这一个封装数据的功能
以下p代表json对象
var p = {"name":"张三","age":23,"gender":"男"};
对象数据类型:
格式: {属性:值,属性:值,属性:值,...}
数组/集合数据类型(数组大小是固定的,集合大小是可变的,这里可以把集合当成数组,只不过集合大小可变):
格式: {[obj,obj,...]}
例如:user对象用json数据格式表示
{“username”:“zhangsan”,“age”:28,“password”:“123”,“addr”:“北京”}
List 用json数据格式表示
{ [
{“pid”:“10”,“pname”:“小米4C”},
{},
{}
]}
只要是对象就用 {} 括起来,只要是集合就用 [] 括起来
注意:对象格式和数组格式可以互相嵌套,一个对象中的一个属性可以是一个集合或数组
1. 基本规则
* 数据在名称/值对中:json数据是由键值对构成的,键值对都在{}当中
* 键用引号(单双都行)引起来,也可以不使用引号
* 值的取值类型:
1. 数字(整数或浮点数)
2. 字符串(在双引号中)
3. 逻辑值(true 或 false)
4. 数组(在方括号中) {"persons":[{},{}]}
5. 对象(在花括号中) {"address":{"province":"陕西"....}}
6. null
* 数据由逗号分隔:多个键值对由逗号分隔
* 花括号保存对象:使用{}定义json 格式
* 方括号保存数组或集合:[]:json里可以包含数组或集合
var jsons = {
"key1":"abc", // 字符串类型
"key2":1234, // Number
"key3":[1234,"21341","53"], // 数组
"key4":{ // json 类型
"key4_1" : 12,
"key4_2" : "kkk"
},
"key5":[{ // json 数组
"key5_1_1" : 12,
"key5_1_2" : "abc"
},{
"key5_2_1" : 41,
"key5_2_2" : "bbj"
}] ,
"key6": true //布尔类型
};
JSON 对象的访问:
json 对象,顾名思义,就知道它是一个对象。里面的 key 就是对象的属性。我们要访问一个对象的属性,只需要使 用【对象名.属性名】的方式访问即可。
// 访问 json 的属性
alert(jsons.key1); // "abc"
// 访问 json 的数组属性
alert(jsons.key3[1]); // "21341"
// 访问 json 的 json 属性
alert(jsons.key4.key4_1);//12
// 访问 json 的 json 数组
alert(jsons.key5[0].key5_1_2);//"abc"
举例:
1:json的key是字符串, json的value是Object
这个一个对象中有username,age,password,addr,account属性,其中account属性的值还为一个对象
2:这个persons为一个集合,集合中有两个对象,persons[1]为集合中的第一个对象
3:json为一个对象,这个对象有一个属性baobao,baobao的值为一个集合,json。baobao[1]为获取baobao值的第一个对象
4:json为一个对象,它有三个属性,第一个属性是一个单纯的值,第二个属性是一个对象,第三个属性是一个集合
以上这些东西都是写在《script》中的,所以说json是js的原生内容,也就意味着js可以直接取出json对象中的数据,只要var 对象名称=json格式对象,我们就在js中直接通过对象格式的名称来获取到对象中的数据,不需要解析
json 的两个常用方法
json 的存在有两种形式。
一种是:对象的形式存在,我们叫它 json 对象。
一种是:字符串的形式存在,我们叫它 json 字符串。
一般我们要操作 json 中的数据的时候,需要 json 对象的格式。
一般我们要在客户端和服务器之间进行数据交换的时候,使用 json 字符串。
JSON 对象和字符串对象的互转:
JSON.stringify( json ); 此方法可以把一个 json 对象转换成为 json 字符串
JSON.parse( jsonString ); 此方法可以把一个 json 字符串转换成为 json 对象
var jsonObj = {
"key1":12,
"key2":"abc",
"key3":true,
"key4":[11,"arr",false],
"key5":{
"key5_1" : 551,
"key5_2" : "key5_2_value"
},
"key6":[{
"key6_1_1":6611,
"key6_1_2":"key6_1_2_value"
},{
"key6_2_1":6621,
"key6_2_2":"key6_2_2_value"
}]
};
// 把json对象转换成为 json字符串
var jsonObjString = JSON.stringify(jsonObj); // 特别像 Java中对象的toString
alert(jsonObjString)
// 把json字符串。转换成为json对象
var jsonObj2 = JSON.parse(jsonObjString);
alert(jsonObj2.key1);// 12
alert(jsonObj2.key2);// abc
JSON 在 java 中的使用
我们要使用 json 和 java 中使用,我们需要使用到一个第三方的包。它就是 gson.jar。
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串 转成一个 Java 对象,或者反过来。
json 在 java 中的操作。常见的有三种情况。
1、java 对象和 json 的转换
2、java 对象 list 集合和 json 的转换
3、map 对象和 json 的转换
public class Person {
private Integer id;
private String name;
public Person() {
}
public Person(Integer id, String name) {
this.id = id;
this.name = name;
}
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;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
1、java 对象和 json 的转换
// javaBean和json的互转
@Test
public void test1(){
Person person = new Person(1,"国哥好帅!");
// 创建Gson对象实例
Gson gson = new Gson();
// toJson方法可以把java对象转换成为json字符串
String personJsonString = gson.toJson(person);
System.out.println(personJsonString);
// fromJson把json字符串转换回Java对象
// 第一个参数是json字符串
// 第二个参数是转换回去的Java对象类型
Person person1 = gson.fromJson(personJsonString, Person.class);
System.out.println(person1);
}
2、java 对象 list 集合和 json 的转换
public class PersonListType extends TypeToken<ArrayList<Person>> {
}
//List 和json的互转
@Test
public void test2() {
List<Person> personList = new ArrayList<>();
personList.add(new Person(1, "国哥"));
personList.add(new Person(2, "康师傅"));
Gson gson = new Gson();
// 把List转换为json字符串
String personListJsonString = gson.toJson(personList);
// [{"id":1,"name":"国哥"},{"id":2,"name":"康师傅"}]
System.out.println(personListJsonString);
List<Person> list = gson.fromJson(personListJsonString, new PersonListType().getType());
System.out.println(list);
Person person = list.get(0);
System.out.println(person);
}
3、map 对象和 json 的转换
//map 和json的互转
@Test
public void test3(){
Map<Integer,Person> personMap = new HashMap<>();
personMap.put(1, new Person(1, "国哥好帅"));
personMap.put(2, new Person(2, "康师傅也好帅"));
System.out.println("Map为"+personMap);
Gson gson = new Gson();
// 把 map 集合转换成为 json字符串
String personMapJsonString = gson.toJson(personMap);
System.out.println("json字符串为"+personMapJsonString);
// Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString, new PersonMapType().getType());
Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString, new TypeToken<HashMap<Integer,Person>>(){}.getType());
System.out.println(personMap2);
Person p = personMap2.get(1);
System.out.println(p);
}