欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JSON总结

程序员文章站 2022-03-01 15:44:38
...

一、简介

  1. JSON:JavaScript 对象表示法(JavaScript Object Notation)。
  2. JSON 是存储和交换文本信息的语法。类似 XML。
  3. JSON 比 XML 更小、更快,更易解析。
  4. JSON 是轻量级的文本数据交换格式
  5. JSON 独立于语言
  6. JSON 具有自我描述性,更易理解
  7. JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。

二、与XML进行比较

1、类似XML

  • JSON 是纯文本
  • JSON 具有“自我描述性”(人类可读)
  • JSON 具有层级结构(值中存在值)
  • JSON 可通过 JavaScript 进行解析
  • JSON 数据可使用 AJAX 进行传输

2、与XML的不同之处

  • 没有结束标签
  • 更短
  • 读写的速度更快
  • 能够使用内建的 JavaScript eval() 方法进行解析
  • 使用数组
  • 不使用保留

三、为什么使用JSON

对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:

1、使用XML

  • 读取 XML 文档
  • 使用 XML DOM 来循环遍历文档
  • 读取值并存储在变量中

2、使用JSON

  • 读取 JSON 字符串
  • 用 eval() 处理 JSON 字符串

四、语法

JSON 语法是 JavaScript 语法的子集。

1、json 的语法规则

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

2、json 名称/值对

JSON 数据的书写格式是:名称/值对。

名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

"firstName" : "John"

这很容易理解,等价于这条 JavaScript 语句:

firstName = "John"

3、json值

JSON 值可以是:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null

4、json对象

JSON 对象在花括号中书写:

对象可以包含多个名称/值对:

{ "firstName":"John" , "lastName":"Doe" }

这一点也容易理解,与这条 JavaScript 语句等价:

firstName = "John"
lastName = "Doe"

5、json数组

JSON 数组在方括号中书写:

数组可包含多个对象:

{
	"employees": [
		{ "firstName":"John" , "lastName":"Doe" },
		{ "firstName":"Anna" , "lastName":"Smith" },
		{ "firstName":"Peter" , "lastName":"Jones" }
	]
}

在上面的例子中,对象 “employees” 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。

6、json文件

  • JSON 文件的文件类型是 “.json”
  • JSON 文本的 MIME 类型是 “application/json”

五、转换★★★★★(重点)

1、Js中的json转换问题

1.1 将jsonStr -> jsonObj

  • JSON.parse(jsonStr);

示例:

//json 字符串
var jsonStr = '{"name1":"value1","name2":"value2","name3":[1,"str",true]}';
//json 对象
var jsonObj = {"name1":"value1","name2":"value2","name3":[1,"str",true]};
//将jsonStr -> jsonObj	JSON.parse(jsonStr)
var jObj = JSON.parse(jsonStr);

1.2 将jsonObj -> jsonStr

  • JSON.stringify(jsonObj);
//将jsonObj -> jsonStr	JSON.stringify(jsonObj)
var jStr = JSON.stringify(jsonObj);

2、Java中json转换问题

2.1 将jsonStr -> javaObj

  • fromJson(String str,Class clazz)
    • fromJson(String str,Type type)
    • gson.fromJson(jsonStr, new TypeToken<List>(){}.getType());

示例:

List转json串

void testList() {
    List<Student> list = new ArrayList<>();
    list.add(new Student("zs", 18, "男"));
    list.add(new Student("ls", 19, "女"));
    list.add(new Student("ww", 20, "不详"));
    //将list转换为jsonStr
    String jsonStr = gson.toJson(list);
    //[{"name":"zs","age":18,"gender":"男"}, {"name":"zs","age":18,"gender":"男"}, 			{"name":"zs","age":18,"gender":"男"}]
    System.out.println(jsonStr);
   
    
    //jsonStr->list,关键位置,这里使用的是TypeToken的子类
    List<Student> list2 = gson.fromJson(jsonStr, new TypeToken<List<Student>>(){}.getType());
    
    
    System.out.println(list2.get(0).getName());
		
	}

Map转json串


void testMap() {
    Map<String,Student> map = new HashMap<>();
    map.put("zs", new Student("zs", 18, "男") );
    map.put("ls", new Student("ls", 19, "女") );
    map.put("ww", new Student("ww", 20, "不详") );
    //map->jsonStr
    String jsonStr = gson.toJson(map);	//{"zs":{{"name":"zs","age":18,"gender":"男"},"ls":{"name":"zs","age":18,"gender":"男"},}

    
    //jsonStr->map,关键位置,这里使用的是TypeToken的子类
    Map<String,Student> map2 = gson.fromJson(jsonStr, new TypeToken<Map<String,Student>>(){}.getType());
    
    
    System.out.println(map2.get("zs").getName());
		
	}

2.2 将javaObj -> jsonStr

  • toJson()
void testStudent() {
		//student -> jsonStr
		Student stu = new Student("zs", 18, "男");
		//new Gson
		String jsonStr = gson.toJson(stu);	//String str = 			{"name":"zs","age":18,"gender":"男"}
		System.out.println(jsonStr);
		//jsonStr -> Student
		Student student = gson.fromJson(jsonStr, Student.class);
		System.out.println(student.getName());
	}