JSON(JavaScript Object Notation)

2024-04-12 01:12
文章标签 java script json object notation

本文主要是介绍JSON(JavaScript Object Notation),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

是什么

为什么会设计json

数据结构

数据类型

字符串(String)

数字(Number)

对象(Object)

数组(Array)

布尔值(Boolean)

null

基本结构

对象(Object)

数组(Array)

格式结合示例

数组中包含对象数据格式

数组包含各种数据类型

对象包含数组数据类型

对象包含各种数据类型

易错点

对象存储数组数据类型

数组存储对象数据类型

嵌套问题


是什么

JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于语言的文本格式来存储和表示数据。简单、清晰的层次结构使得 JSON 成为理想的数据交换语言。并且目前这种数据格式比较流行,逐渐替换掉了传统的xml数据格式。

总结:JSON是一种轻量级的数据交换格式并且还是与语言无关的数据交换。


为什么会设计json

JSON的设计是为了解决数据交换中的复杂性,提高数据处理的效率和可读性,同时保持跨语言和平台的兼容性。以下为原因解释:

  • 简化数据交换:在早期的网络开发中,开发者需要一种既简单又高效的方式来在不同系统之间传输和存储数据。XML曾是主要的数据交换格式,但由于其语法相对繁琐,导致开发者需要花费更多的时间和精力来处理数据。JSON的设计目标就是简化这一过程,使数据交换变得更为简单和清晰。
  • 易于阅读和编写:JSON的语法简洁,格式清晰,易于人类阅读和理解。这有助于开发者快速地识别和修改数据,减少了出错的可能性。
  • 易于机器解析和生成:JSON的简洁语法也使其易于被计算机程序解析和生成。这大大提高了数据处理的效率,特别是在网络传输和服务器端处理中。
  • 跨语言和平台兼容性:JSON是一种语言无关的数据格式,可以被各种不同的编程语言和平台所支持。这使得JSON成为了一种理想的数据交换格式,能够在不同的系统和应用之间进行无缝的数据交换。
  • 支持复杂数据结构:尽管JSON的语法简洁,但它仍然能够表示复杂的数据结构。通过对象和数组的嵌套,JSON可以灵活地表示各种复杂的数据关系,满足了各种应用程序的需求。

数据结构

JSON格式最外层基本结构和内层数据类型说明。

数据类型

虽然JSON来源于JavaScript,但它并不包含JavaScript中的所有数据类型,比如函数或undefined在JSON中,这些类型是不被支持的。

数据类型:字符串、数字、对象、数组、布尔值、null。

字符串(String)
  • 字符串是JSON中的文本数据,用双引号括起来。
  • 字符串中可以包含转义字符,如 \n (换行)、\t(制表符)、\"(双引号)等。

示例:"Hello,World!"

数字(Number)
  • JSON中的数字可以是整数或浮点数。
  • 不支持八进制和十六进制字面量。

示例:123、0.12、-9876.5

对象(Object)
  • 对象是一组无序的键值对集合,键是字符串,值可以是任何JSON数据类型。
  • 对象使用花括号 {} 表示。
  • 对象可以包含其他对象作为值,形成嵌套结构。

示例:{"name":"John","age":30}

数组(Array)
  • 数组是有序的值列表,值可以是任何JSON数据类型。
  • 数组使用方括号 [] 表示。
  • 数组可以包含其他数组作为元素,同样也可以包含对象,实现更深层次的嵌套。

示例:[1,"apple",true,null]

布尔值(Boolean)
  • JSON中有两个布尔值:true 和 false。

示例:true、false

null
  • null 是一个特殊的标记,表示空值或不存在的值。

示例:null

基本结构

JSON数据格式最外层可以是两种基本结构之一:对象(Object)或数组(Array)。

对象和数组。这两种类型可以相互嵌套,形成更复杂的数据结构。

对象(Object)

说明:在JSON中,对象被表示为一系列的键值对,其中键是字符串可以是任何JSON数据类型(字符串、数字、对象(另一个JSON对象)、数组、布尔值(true 或 false)或者 null。对象用大括号 {} 包围。

语法:{"key1":obj,"key2":obj,"key3":obj...}

获取数据:通过键来访问值。

示例:

{  "name": "John",  "age": 30,  "isStudent": false  
}
数组(Array)

说明:JSON,数组是有序的值的集合。这些值可以是任何JSON数据类型(字符串、数字、对象、数组、布尔值或 null。数组用方括号 [] 包围。

语法:[obj,obj,obj...]

获取数据:通过索引(从0开始)来访问每个元素。

示例:

[  "apple",  "banana",  "cherry"  
]

PS:在JSON中,对象的键值对用冒号 : 分隔不同的键值对之间用逗号 , 分隔,并且整个对象用大括号 {} 包围数组则使用方括号 [] 包围数组中的元素用逗号 , 分隔。对象格式最后一个键值对和数组格式最后一个元素后不能使用逗号。


格式结合示例

数组中包含对象数据格式

[  {  "name": "John",  "age": 30,  "city": "New York"  },  {  "name": "Jane",  "age": 25,  "city": "Los Angeles"  },  {  "name": "Bob",  "age": 35,  "city": "Chicago"  }  
]

数组包含各种数据类型

数组格式中可以同时包含各种数据类型

[  {                            // 对象"name": "John",  "age": 30  },  "Hello, World!",             // 字符串true,                        // 布尔值42,                          // 数字null,                        // null值[1, 2, 3, 4, 5]              //另一个数组
]

对象包含数组数据类型

{  "student": [{  "name": "Jane Smith",  "age": 28  },  {  "name": "Bob Johnson",  "age": 32  }] 
}

对象包含各种数据类型

{  "name": "John Doe",             // 字符串  "age": 30,                      // 数字  "isStudent": false,             // 布尔值  "nullField": null,             // null值  "grades": [90, 85, 88],        // 数组  "address": {                    // 另一个对象  "street": "123 Main St",  "city": "Anytown",  "state": "CA",  "zip": "12345"  }
}

易错点

对象存储数组数据类型

在JSON对象中存储一个数组,并且这个数组没有特定的键名,那么这在JSON中是不合法的。

正确的存储方式如下:

{  "arrayKey": [  "value1",  "value2",  3,  true  ]  
}
数组存储对象数据类型

在JSON数组中存储一个对象,并且这个对象有键名,那么这在JSON中是不合法的。

正确的存储方式如下:

[  {  "name": "John",  "age": 30,  "city": "New York"  }
]
嵌套问题

对象可以嵌套数组,数组也可以嵌套对象,这种嵌套结构在理论上可以无限层深。

JSON规范本身并没有明确限制嵌套的层数,但在实际应用中,过深的嵌套可能会导致一些问题。例如,过深的嵌套可能会使得数据结构变得复杂且难以理解,增加解析和处理的难度

PS:虽然JSON格式并没有限制嵌套的层数,但过深的嵌套会产生一系列问题,建议尽量保持数据结构的简洁和清晰,避免过深的嵌套。

这篇关于JSON(JavaScript Object Notation)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/895691

相关文章

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta