您当前的位置:首页 > 计算机 > 编程开发 > JavaScript

JavaScript Object Notation----JSON详解

时间:12-07来源:作者:点击数:

1 JavaScript Object Notation

* 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":"男"};

2:格式:

对象数据类型:
		格式: {属性:值,属性:值,属性:值,...}

数组/集合数据类型(数组大小是固定的,集合大小是可变的,这里可以把集合当成数组,只不过集合大小可变):
		格式:  {[obj,obj,...]}

例如:user对象用json数据格式表示

{“username”:“zhangsan”,“age”:28,“password”:“123”,“addr”:“北京”}

List 用json数据格式表示

{ [

{“pid”:“10”,“pname”:“小米4C”},

{},

{}

]}

只要是对象就用 {} 括起来,只要是集合就用 [] 括起来

注意:对象格式和数组格式可以互相嵌套,一个对象中的一个属性可以是一个集合或数组

3. 语法:

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);

    }
在这里插入图片描述
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门