JSON基础

Posted 再来半包

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSON基础相关的知识,希望对你有一定的参考价值。

导读模块

发展史:21世纪初,Douglas Crockford寻找一种简便的数据交换格式,

能够在服务器之间交换数据。当时通用的数据交换语言是XML,

但是Douglas Crockford觉得XML的生成和解析都太麻烦,

所以他提出了一种简化格式,也就是Json。

JSON:是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率

轻量级是指跟xml作比较。

数据交换指的是客户端和服务器之间业务数据的传递格式。

简而言之:是存储数据的一种方式/格式

与之类似的技术有:xml

JSON 语法规则

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_1_1":6621,
					"key6_1_2":"key6_2_2_value"
				}]

}

json的访问

json本身就是一个对象

json中的key我们可以理解为是对象中的一个属性。

json中的key访问就跟访问对象的属性一样:json对象.key

 alert(typeof (jsonObj));//Object   json就是一个对象
 alert(jsonObj.key1);//12
 alert(jsonObj.key2);//abc
 alert(jsonObj.key3);//true
 alert(jsonObj.key4)//得到数组[11,"才",false]

//json中数组值的遍历,可以通过下标去访问
for (var i=0;i<jsonObj.key4.length;i++){
    alert(jsonObj.key4[i]);
}
 alert(jsonObj.key5.key5_1);//551
alert(jsonObj.key5.key5_2);//key5_2_value
			for (var j=0;j<jsonObj.key6.length;j++){
			   var jsonob=jsonObj.key6[j];//取出来每一个元素都是json对象
			   alert(jsonob.key6_1_1);
			   alert(jsonob.key6_1_2)
			}

json的两个常用方法

json的两种存在形式

1、对象形式存在,json对象

2、字符串形式村子,json字符串

一般我们要操作json中的数据的时候,需要json对象的格式。

一般我们要在客户端和服务器之间进行数据交换的时候,使用json字符串。

json.stringify() 把json对象转换成json字符串

json.parse() 把json字符串转换成为json对象

JSON 在java中的使用

javaBean和json的互转

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);//{"name":"杨过","id":1}
        //fromJson把字符串转换回java对象
        //第一个参数是json字符串
        //第二个参数是转换回去的Java对象类型
        Person person1= gson.fromJson(personJsonString,Person.class);
    	//Person person2=gson.fromJson(personJsonString,person.getclass());
        System.out.println(person1);//Person{name='杨过', id=1}
    }

以上代码可以看到,在对一个对象进行toJson方法的时候,他会转变成一个Json字符串,但是如果想要转回java对象,则需要使用fromJson,而且参数为两个,第一个是Json字符串,第二个为java对象的类型,类名.class或者定义好的对象名.getclass()

List和json的互转

public void test2(){
        List<Person> personList =new ArrayList<>();
       //personList中添加两个Person对象
        personList.add(new Person("杨过",1));
        personList.add(new Person("小龙女",2));

        Gson gson=new Gson();
    	//通过toJson()方法将List转换为Json字符串
        String personListJsonString=gson.toJson(personList);
        System.out.println(personListJsonString);
    	//通过fromJson()方法将Json字符串转为Java集合
    	//第一个参数为要转的Json字符串
    	//第二个参数为TypeToken<T>的匿名类
        List<Person> list=gson.fromJson(personListJsonString,new TypeToken<List<Person>>(){}.getType());
        System.out.println(list);
        Person person = list.get(0);
        System.out.println(person);
    }
/*
运行结果
[{"name":"杨过","id":1},{"name":"小龙女","id":2}]            Json字符串
[Person{name='杨过', id=1}, Person{name='小龙女', id=2}]		Json字符串转回的List
Person{name='杨过', id=1}									  Json字符串转回List中的元素
*/

Json字符串转换为List与Json字符串转换为JavaBean不同在于from的第二个参数,转换为JavaBean需要javaBean类的class,而List 的话,第二个参数为一个TypeToken的匿名类,而这个泛型为List 的类型,也可以通过去定义一个ListType的类,去继承TypeToken类,在第二个参数后面进行new ListType这个TypeToken的子类实现Json字符串转回JavaList

map和json的互转

public void test3(){
        Map<Integer,Person> personMap=new HashMap<>();
    	//为personMap集合中添加两个Person对象
        personMap.put(1,new Person("磊哥",1));
        personMap.put(2,new Person("航哥",1));
        Gson gson = new Gson();
        //把map集合转换成为Json字符串
        String personMapJsonString =gson.toJson(personMap);
        Map<Integer,Person> personMap1 = gson.fromJson(personMapJsonString, new TypeToken<Map<Integer,Person>>(){}.getType());
        System.out.println(personMap1);
        Person per=personMap1.get(1);
        System.out.println(per);
    }
/*
打印结果
{1=Person{name='磊哥', id=1}, 2=Person{name='航哥', id=1}}
Person{name='磊哥', id=1}
*/

Json字符串转回Map与Json字符串转回List大体一样,不同的就是new的TypeToken类的泛型,要与之要转回的类型相同

以上是关于JSON基础的主要内容,如果未能解决你的问题,请参考以下文章

实用代码片段将json数据绑定到html元素 (转)

json 可视代码工作室Angular with Firebase片段

vs code 用户代码片段 html.json

错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”

如何在android中将json数据加载到片段中

使用 json rereiver php mysql 在片段中填充列表视图