当前位置: 首页 > news >正文

01_JSON的理解

文章目录

  • 1、什么是JSON
  • 2、为什么要用JSON
  • 3、JSON的格式规定
  • 4、JSON字符串和JS对象的转换
  • 5、JSON对象和JS对象的区别
  • 6、JSON对象和JSON字符串的区别以及转换
  • 7、JS对象加单引号和不加引号的区别

1、什么是JSON

全称 JavaScript Object Notation,即JavaScript对象标记法
JSON本身是参考JavaScript对象的规则定义的,其语法与JavaScript定义对象的语法几乎完全相同

2、为什么要用JSON

JSON可以很轻松的和JS中的数据类型互相转换

3、JSON的格式规定

在这里插入图片描述

1> 对象 (Object)概念图

在这里插入图片描述

对象(0bject):对应着JS中的对象
	对象用大括号(“{}”)括起来,大括号里是一系列的“名称/值对”,
	两个并列的数据之间用逗号(“,”)隔开,使用英文的逗号(“,”),最后一个“名称/值对“之后不要加逗号
	JSON中Key/Value不能使用单引号
	JSON中对象的属性名必须是双引号,属性值如果是字符串也必须是双引号
	JSON只要涉及到字符串就必须使用双引号,不支持undefined

2> 数组(Array)概念图

在这里插入图片描述

数组(Array):对应着JS中的数组形式
	数组表示一系列有序的值,用方括号(“[]”)包围起来,并列的值之间用逗号分隔
	数组中的字符串必须使用双引号
	JSON中只要涉及到字符串 就必须使用双引号
	不支持undefined
	
如:[1,2,"three","four",true,false,null,[1,2],{"name":"张珊"}]

3> 简单形式

简单形式:对应着JS中的基础数据类型
	JSON的简单值的格式对应着JS中的基础数据类型:数字 字符串 布尔值
	JS中一共有六种数据类型:基本类型和引用类型
	JS基本数据类型五种:
		String(字符串)、
		Number(数值)、
		Boolean(布尔值)、
		Null(空对象)、
		Undefined(未赋值)
	JS引用数据类型一种:
		Object(对象类型),如:Object、array、function

3.1> 简单形式1:名称/值对(Name/Value) 概念图

在这里插入图片描述

名称/值对(Name/Value)
   	名称(Name)是一个字符串,要用双引号括起来,
   		不能用单引号,也不能没有引号,这点与JS不同
   	值的类型只有七种:
   		字符串(string)、
   		数值(number)、
   		对象(object)、
   		数组(array),
   		 true、
   		 false、
   		 null。
   	注意:不能有undefined、函数等类型

3.2> 简单形式2:字符串(string)概念图

在这里插入图片描述

字符串(string)
   	英文双引号括起来,不能用单引号,也不能没有。
   	字符串中不能单独出现双引号(”)和右斜杠(“\")
   	如果要打双引号或右斜杠,需要使用“右斜杠+字符”的形式,例如\”和\\
   	
注意:JSON中没有undefined、字符串必须使用双引号、不能用注释的

4、JSON字符串和JS对象的转换

JSON字符串转换为JS对象,JSON.parse()
JS对象转化为JSON字符串,JSON.stringify()

JSON字符串转换为JS对象

//JSON字符串
var stuJson = '{"name":"张珊","age":22,"address":"四川"}'
//将JSON字符串转化为JS对象
var stuObj = JSON.parse(stuJson)
console.log(stuObj)

在这里插入图片描述

JS对象转化为JSON字符串

//JSON对象字符串
var stuJson = '{"name":"张珊","age":22,"address":"四川"}'
//将JSON对象字符串转化为JS对象
var stuObj = JSON.parse(stuJson)
//输出JS对象
console.log(stuObj)
			 
console.log('-------------------------')
			 
//将JS对象转换为JSON字符串
var stu =  JSON.stringify(stuObj)
//输出JSON字符串
console.log(stu)

在这里插入图片描述

5、JSON对象和JS对象的区别

JSON是JS的一种简单的数据格式,
	JSON是javaScript的原生格式,
	它是一种严格的js对象的格式,JSON的属性名必须有双引号,如果值是字符串,也必须是双引号;
	JSON是从属于JS,并且在处理JSON,数据时可直接使用JS内置API;
案例:
//JS对象
var obj1={width:100,height:200}
//JS对象(加了引号的属性名)
var obj2={'width':100,'height':100}
//JSON格式的JS对象(JSON对象,属性名使用双引号)
var obj3={"width":100,"height":100,"name":"rose"}
//JSON格式的字符串(只是一个字符串)
var obj4='{"width":100,"height":200,"name":"rose"}';
区别:
	JSON对象:仅仅是一种数据格式,
		1.键值对方式,键必须加双引号 
		2.值不能是方法函数,不能是undefined/NaN
	JS对象:表示类的实例,
		1.键值对方式,键不加引号 
		2.值可以是函数、对象、字符串、数字、boolean 等

6、JSON对象和JSON字符串的区别以及转换

区别:
Json对象:对象的值可以用 “对象.属性” 进行访问
Json字符串:单引号或者双引号引起来

var json = '{"name":"imooc"}'; // 这个是正确的JSON格式
var json = "{\"name\":\"imooc\"}"; // 这个也是正确的JSON格式

转换:Json对象转化为Json字符串,调用 JSON.stringify()

var  obj = {"name":"shily","sex":"女","age":"23"}//json对象
var  objToStr = JSON.stringify(obj);
console.log(objToStr);
console.log(typeof objToStr)

在这里插入图片描述

7、JS对象加单引号和不加引号的区别

在JavaScript中,加引号与不加引号都是一样用,都是有效的
什么时候有区别。即在使用一些非合法命名规则的时候,
就有必要加单引号(比如属性名是以数字开头,就需要加单引号
案例:
var obj = {name:'张珊','age':18,'246addr':'北京'};
console.log(obj.name);
console.log(obj['age'])
console.log(obj['246addr'])

属性名称非法,需加引号
在这里插入图片描述

相关文章:

  • 3D感知技术(3)双目立体视觉测距
  • spring学习第二天_Spring Ioc(1)
  • 22-08-30 西安JUC(03) Callable接口、阻塞队列4套方法、ThreadPool线程池
  • React(8)-组件ref
  • 2022/8/30
  • picoCTF - Day 1 - Warm up
  • 前端面试题之组件
  • 自己动手写编译器:词法解析的系统化研究
  • 【程序员面试金典】01.02. 判定是否互为字符重排
  • go实现剑指offer
  • 【Go-Lua】Golang嵌入Lua代码——gopher-lua
  • yolov5+shufflenet轻量化目标检测
  • 【BurpSuite】插件开发学习之J2EEScan(上)-被动扫描
  • java计算机毕业设计企业公开招聘系统源码+数据库+系统+lw文档+mybatis+运行部署
  • 赛事开源Baseline参考目录格式
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Bytom交易说明(账户管理模式)
  • Docker容器管理
  • JWT究竟是什么呢?
  • Laravel5.4 Queues队列学习
  • win10下安装mysql5.7
  • 分布式熔断降级平台aegis
  • 欢迎参加第二届中国游戏开发者大会
  • 开源SQL-on-Hadoop系统一览
  • 盘点那些不知名却常用的 Git 操作
  • 浅谈web中前端模板引擎的使用
  • 容器服务kubernetes弹性伸缩高级用法
  • 数组的操作
  • #pragam once 和 #ifndef 预编译头
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • %@ page import=%的用法
  • (1)虚拟机的安装与使用,linux系统安装
  • (11)MSP430F5529 定时器B
  • (C++17) optional的使用
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (四)图像的%2线性拉伸
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转载)利用webkit抓取动态网页和链接
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .gitignore文件---让git自动忽略指定文件
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .Net mvc总结
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET设计模式(11):组合模式(Composite Pattern)
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @Query中countQuery的介绍
  • [20170705]diff比较执行结果的内容.txt
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [AX]AX2012 SSRS报表Drill through action
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素