JavaScript中的JSON

一:分类

  •  简单值:字符串、数值、布尔值和 null 可以在 JSON 中出现,就像在 JavaScript 中一样。特殊 值 undefined 不可以。
  •  对象:第一种复杂数据类型,对象表示有序键/值对。每个值可以是简单值,也可以是复杂类型。
  •  数组:第二种复杂数据类型,数组表示可以通过数值索引访问的值的有序列表。数组的值可以 是任意类型,包括简单值、对象,甚至其他数组。

1.1 简单值

JSON 字符串必须使用双引号(单引号会导致语法 错误)。

布尔值和 null 本身也是有效的 JSON 值。

1.2 对象

JSON 中的对象必须使用双引号把属性名 包围起来

 即使整个 JSON 对象中有两个属性都叫"name", 但它们属于两个不同的对象,因此是允许的。

{"name": "Nicholas","age": 29,"school": {"name": "Merrimack College","location": "North Andover, MA"}
} 

1.3 数组

 二:解析与序列化

JSON 可以直接被解析 成可用的 JavaScript 对象。

2.1 JSON.stringify():将JavaScript序列化为JSON

let book = {title: "Professional JavaScript",authors: ["Nicholas C. Zakas","Matt Frisbie"],edition: 4,year: 2017
};
let jsonText = JSON.stringify(book); 

 这个例子使用 JSON.stringify()把一个 JavaScript 对象序列化为一个 JSON 字符串,保存在变量 jsonText 中。默认情况下,JSON.stringify()会输出不包含空格或缩进的 JSON 字符串,因此jsonText 的值是这样的:

{"title":"Professional JavaScript","authors":["Nicholas C. Zakas","Matt Frisbie"], "edition":4,"year":2017}

值为 undefined 的任何属性也会被跳过。最终得到的就是所有实例属性均为有效 JSON 数据类型的表示。

2.2 JSON.parse() :将JSON解析为原生JavaScript值

JSON 字符串可以直接传给 JSON.parse(),然后得到相应的 JavaScript 值。

let bookCopy = JSON.parse(jsonText);

2.3 序列化选项

2.3.1 第二个参数:过滤结果

a.字符串数组

 b.函数

如果第二个参数是一个函数,则行为又有不同。提供的函数接收两个参数:属性名(key)和属性 值(value)。可以根据这个 key 决定要对相应属性执行什么操作。这个 key 始终是字符串,只是在值 不属于某个键/值对时会是空字符串。

let book = {title: "Professional JavaScript",authors: ["Nicholas C. Zakas","Matt Frisbie"],edition: 4,year: 2017
};
let jsonText = JSON.stringify(book, (key, value) => {switch(key) {case "authors":return value.join(",")case "year":return 5000;case "edition":return undefined;default:return value;
} 

 2.3.2 第三个参数:字符串缩进

JSON.stringify()方法的第三个参数控制缩进和空格。

let book = {title: "Professional JavaScript",authors: ["Nicholas C. Zakas","Matt Frisbie"],edition: 4,year: 2017
};
let jsonText = JSON.stringify(book, null, 4);

  •  最大缩进值为 10,大于 10 的值会自动设置为 10。
  • 如果缩进参数是一个字符串而非数值,那么 JSON 字符串中就会使用这个字符串而不是空格来缩进。 使用字符串,也可以将缩进字符设置为 Tab 或任意字符

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/27809.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32F4_FLASH模拟EEPROM

目录 前言 1. 内部FLASH简介 2. 内部FLASH写入过程 3. 内部FLASH库函数 4. FLASH的读写保护及解除 5. FLASH相关寄存器 6. 实验程序 6.1 main.c 6.2 STMFlash.c 6.3 STMFlash.h 前言 STM32F4本身并没有自带EEPROM,但是STM32F4具有IAP功能,也就…

操作系统进行设备控制的方式

一.I/O控制方式 上一篇的博客介绍了设备管理的一些概念基础知识点,其中I/O控制方式这一块没有详细说明。设备管理的主要任务之一是控制设备和内存或CPU之间的数据传送。外围设备和内存之间的输入/输出控制方式有4种,下面分别加以介绍。 二.程序直接控制…

Kotlin基础(五):类和接口

前言 本文主要讲解类和接口,主要包括类的声明、构造器、类成员、修饰符、类的继承、接口、抽象类。 Kotlin文章列表 Kotlin文章列表: 点击此处跳转查看 目录 1.1 类的声明 在 Kotlin 中,类的声明使用关键字 class。下面是一个简单的类声明的示例&…

高时空分辨率、高精度一体化预测技术的风、光、水自动化预测技术的应用

第一章 预测平台讲解及安装 一、高精度气象预测基础理论介绍 综合气象观测数值模拟模式; 全球预测模式、中尺度数值模式; 二、自动化预测平台介绍 Linux系统 Crontab定时任务执行机制 Bash脚本自动化编程 硬件需求简介 软件系统安装 …

【论文阅读】一些多轮对话文章的体会 ACL 2023

前言 本文是对昨天看到的ACL 2023三篇多轮对话文章的分享这三个工作都是根据一些额外属性控制输出的工作,且评估的方面比较相似,可以借鉴 方法 这几篇文章都不是做general任务的,倾向于通过一些额外信息,来做specific任务 【1】…

Linux的基本使用和web程序部署

注意:本文章不适合C学习者(知识点远远不够),只适合Java学习者,学习简单的Linux命令 1.Linux的背景知识 1.1Linux是什么 Linux是一个操作系统,和Windows是“并列”的关系。经过多年的发展,Lin…

Three.js——十三、自定义大小画布、UI交互按钮以及3D场景交互、渲染画布为文件(图片)

画布全屏以及自定义大小画布 <!-- canvas元素默认是行内块元素 --> <divclass"model"style"background-color: #ff0000;"width"300"height"180" ></div>画布随窗口变化 // 画布跟随窗口变化 window.onresize fun…

Qt 项目架构之----MVC架构

MVC 模式代表 Model-View-Controller&#xff08;模型-视图-控制器&#xff09; 模式。这种模式用于应用程序的分层开发。 Model&#xff08;模型&#xff09;-是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。View&#xff08;视图&#x…

2023 Testing Expo倒计时-聚焦风丘9003展位

请点击此处&#xff0c;即可进行在线登记报名并了解更多信息&#xff01;

25个高级SQL查询-列出结果集的前5行

本专栏中的许多示例将基于以下员工表(employee)。只有少数例子将以其他表格为基础;在这些情况下,表格将与示例一起进行说明。 一、WITH WITH AS 短语,也叫做子查询部分,定义一个SQL片断后,该SQL片断可以被整个SQL语句所用到。有的时候,with as 是为了提高SQL语句的可读…

2023 Testing Expo倒计时-聚焦Softing 9003展位

请点击此处&#xff0c;即可进行在线登记报名并了解更多信息&#xff01;

计算机二级c语言考试复习大纲(一战到底)

1.C语言关键字 1.数据类型关键字&#xff08;12个&#xff09; char(字符型) short&#xff08;短整型&#xff09; int&#xff08;整型&#xff09; long&#xff08;长整型&#xff09; float&#xff08;单精度浮点型&#xff09; double&#xff08;双精度浮点…