JSON基础

Posted 再来半包

tags:

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

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);//Personname='杨过', 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字符串
[Personname='杨过', id=1, Personname='小龙女', id=2]		Json字符串转回的List
Personname='杨过', 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=Personname='磊哥', id=1, 2=Personname='航哥', id=1
Personname='磊哥', id=1
*/

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

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

10.18

字符串与JSON互转

JavaScript JSON语法

欧拉回路——邮递员

map集合的遍历

Pandas库10_存取json和excel文件