irpas技术客

JSON笔记_aka卡卡

网络 8414

文章目录 JSON介绍JSON在Javascript中的使用json的定义json的访问json的两个常用方法json的存在形式JSON.stringify()JSON.parse() JSON在Java中的使用GsonJavaBean 和 json 的互转List 和 json 的互转Map 和 json 的互转

JSON介绍

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。JSON采用完全独立于语言的文本格式,很多语言都提供对json的支持(c, c++, c#, java, javascript, Perl, Python等) json是一种轻量级的数据交换格式。

轻量级:跟xml比较 数据交换:客户端和服务器之间业务数据的传递格式

JSON在Javascript中的使用 json的定义

json是由 键 值 对 \textcolor{red}{键值对} 键值对组成,由 花 括 号 ( 大 括 号 ) \textcolor{red}{花括号(大括号)} 花括号(大括号)包围。每个键值对由 引 号 \textcolor{red}{引号} 引号引起来, 键 和 值 之 间 \textcolor{red}{键和值之间} 键和值之间用 冒 号 \textcolor{red}{冒号} 冒号进行隔离, 多 组 键 值 对 之 间 \textcolor{red}{多组键值对之间} 多组键值对之间进行 逗 号 \textcolor{red}{逗号} 逗号分隔 实例:

<html> <head> <script type = "text/javascript"> //json的定义 var jsonObj = { "key1":12, "key2":"abc", "key3":trus, "key4":[11, "abc", false], "ket5":{ "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" }] }; </script> </head> <body> </body> </html> json的访问

json本身是一个对象 json中的key可以理解为属性 json中的key访问如同访问对象的属性一样:json对象.key 实例:

<script type = "text/javascript"> //json的定义 var jsonObj = { "key1":12, "key2":"abc", "key3":true, "key4":[11, "abc", false], "ket5":{ "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" }] }; // alert(typeof(jsonObj)); //Object json就是一个对象 //json的访问 // alert(jsonObj.key1);//12 // alert(jsonObj.key2);//abc // alert(jsonObj.key3);//true // alert(jsonObj.key4);//得到数组[11, "abc", 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 // alert(jsonObj.key6);//得到json数组 //取出来每一个元素都是json的元素 // var jsonItem = jsonObj.key6[0]; // alert(jsonItem.key6_1_1);//6611 // alert(jsonItem.key6_1_2);//key6_1_2_value </script> json的两个常用方法 json的存在形式

有两种: 1.对象的形式存在:json对象 2.字符串的形式存在:json字符串 这两种存在形式可以相互转换,方法如下:

JSON.stringify()

JSON.stringify():把json对象转换为json字符串

JSON.parse()

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

使用场景: 1.操作json中的数据时:需要json对象的格式 2.在客户端和服务器之间进行数据交换时:使用json字符串

注意: JSON.xxx()方法中JSON是大写的

实例:

<script type = "text/javascript"> //json的定义 var jsonObj = { "key1":12, "key2":"abc", "key3":true, "key4":[11, "abc", false], "ket5":{ "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" }] }; // alert(typeof(jsonObj)); //Object json就是一个对象 //json的访问 // alert(jsonObj.key1);//12 // alert(jsonObj.key2);//abc // alert(jsonObj.key3);//true // alert(jsonObj.key4);//得到数组[11, "abc", 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 // alert(jsonObj.key6);//得到json数组 //取出来每一个元素都是json的元素 // var jsonItem = jsonObj.key6[0]; // alert(jsonItem.key6_1_1);//6611 // alert(jsonItem.key6_1_2);//key6_1_2_value // alert(jsonObj); //json对象转字符串 var jsonObjString = JSON.stringify(jsonObj);//像java的toString方法 //alert(jsonObjString); //json字符串转json对象 var jsonObj2 = JSON.parse(jsonObjString); alert(jsonObj2); alert(jsonObj2.key1);//12 alert(jsonObj2.key2);//abc </script> JSON在Java中的使用

使用json,需要导入jar包:gson-2.2.4.jar

Gson

创建Gson对象实例:

Gson gson = new Gson();

toJson方法可以把java对象转换为json字符串

String personJsonString = gson.toJson(java对象);

Gson中的fromJson:把json字符串转换为java对象

第一个参数为json字符串

第二个参数是转换回去的java对象类型

Gson对象.fromJson(json字符串, 转换回去的java对象类型) //例子 gson.fromJson(personJsonString, Person.class)

方法总结: 1.xxx转换为json: 1)创建Gson对象

Gson Gson对象名 = new Gson();

2)使用Gson的toJson方法

String 字符串名 = Gson对象名.toJson(xxx对象名);

2.json转换为xxx: 使用Gson的fromJson方法

xxx xxx对象名 = Gson对象名.fromJson(json字符串, xxx类型)

注意: 1.若xxx为javaBean时:

xxx xxx对象名 = gson.fromJson(json字符串名, xxx.class);

2.若xxx为List、Map时: 方法1: 1)创建类型转换的类

//List public class 类名 extends TypeToken<ArrayList<数据类型, 对象类型>> {} //Map public class 类名 extends TypeToken<HashMap<数据类型, 对象类型>> {}

2.调用

xxx xxx对象名 = gson.fromJson(json字符串名, new 类名.getType());

方法2:使用匿名内部类

xxx xxx对象名 = gson.fromJson(personMapJsonString, new TypeToken<HashMap<数据类型, 对象类型>>(){}.getType()); JavaBean 和 json 的互转

实例:

package com.atguigu.pojo; public class Person { private Integer id; private String 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; } public Person(){ } public Person(Integer id, String name) { this.id = id; this.name = name; } @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + '}'; } } package com.atguigu.json; import com.atguigu.pojo.Person; import com.google.gson.Gson; import org.junit.Test; public class JsonTest { // 1.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); //Gson中的fromJson:把json字符串转换为java对象 //第一个参数为json字符串 //第二个参数是转换回去的java对象类型 Person person1 = gson.fromJson(personJsonString, Person.class); System.out.println(person1); } }

List 和 json 的互转

实例:

package com.atguigu.pojo; public class Person { private Integer id; private String 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; } public Person(){ } public Person(Integer id, String name) { this.id = id; this.name = name; } @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + '}'; } } package com.atguigu.json; import com.atguigu.pojo.Person; import com.google.gson.reflect.TypeToken; import java.util.ArrayList; public class PersonListType extends TypeToken<ArrayList<Person>> { } package com.atguigu.json; import com.atguigu.pojo.Person; import com.google.gson.Gson; import org.junit.Test; import java.util.ArrayList; import java.util.List; public class JsonTest { // 2.List和json的互转 @Test public void test2(){ List<Person> personList = new ArrayList<>(); personList.add(new Person(1, "猫猫")); personList.add(new Person(2, "狗狗")); //创建Gson对象实例 Gson gson = new Gson(); //把List转换为json字符串 System.out.println("把List转换为njson字符串:"); String personListJsonString = gson.toJson(personList); System.out.println(personListJsonString); //将json字符串转换为List System.out.println("将json字符串转换为List:"); List<Person> list = gson.fromJson(personListJsonString, new PersonListType().getType()); System.out.println(list); Person person = list.get(0); System.out.println(person); } }

Map 和 json 的互转

实例:

package com.atguigu.pojo; public class Person { private Integer id; private String 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; } public Person(){ } public Person(Integer id, String name) { this.id = id; this.name = name; } @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + '}'; } } package com.atguigu.json; import com.atguigu.pojo.Person; import com.google.gson.reflect.TypeToken; import java.util.HashMap; public class PersonMapType extends TypeToken<HashMap<Integer, Person>> { } package com.atguigu.json; import com.atguigu.pojo.Person; import com.google.gson.Gson; import org.junit.Test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class JsonTest { // 3.Map和json的互转 @Test public void test3(){ Map<Integer, Person> personMap = new HashMap<>(); personMap.put(1, new Person(1, "猫猫")); personMap.put(2, new Person(2, "狗狗")); //创建Gson对象实例 Gson gson = new Gson(); //把Map转换为json字符串 System.out.println("把Map转换为json字符串:"); String personMapJsonString = gson.toJson(personMap); System.out.println(personMapJsonString); //将json字符串转换为Map System.out.println("将json字符串转换为Map:"); Map<Integer, Person> map = gson.fromJson(personMapJsonString, new PersonMapType().getType()); System.out.println(map); Person person = map.get(1); System.out.println(person); } }

优化:类型转换,不需要在单独创建类,使用匿名内部类

package com.atguigu.json; import com.atguigu.pojo.Person; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.junit.Test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class JsonTest { // 3.Map和json的互转 @Test public void test3(){ Map<Integer, Person> personMap = new HashMap<>(); personMap.put(1, new Person(1, "猫猫")); personMap.put(2, new Person(2, "狗狗")); //创建Gson对象实例 Gson gson = new Gson(); //把Map转换为json字符串 System.out.println("把Map转换为json字符串:"); String personMapJsonString = gson.toJson(personMap); System.out.println(personMapJsonString); //将json字符串转换为Map System.out.println("将json字符串转换为Map:"); // Map<Integer, Person> map = gson.fromJson(personMapJsonString, new PersonMapType().getType()); Map<Integer, Person> map = gson.fromJson(personMapJsonString, new TypeToken<HashMap<Integer, Person>>(){}.getType()); System.out.println(map); Person person = map.get(1); System.out.println(person); } }


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #JSON笔记 # #JSON #的互转List #的互转Map