💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
> 原文出处:http://codecloud.net/core-json-tutorial-6735.html > 本文由[程序员的资料库技术翻译小组](http://codecloud.net/tech-article-translate-6591.html)翻译,如有错误请帮忙更正,谢谢支持。 > > 英文原文:[Core JSON](https://dzone.com/refcardz/core-json) > > 欢迎转载,转载请务必保留译文出处和原文出处,谢谢合作! [JSON(JavaScript Object Notation)](http://w3cschool.codecloud.net/json/what-is-json.html)是一种基于文本的标准数据交换格式,使应用程序通过计算机网络交换数据。因为JSON独立于编程语言和计算平台,因此用Ruby ,[Java](http://w3cschool.codecloud.net/java/java-hello-world.html)/EE,Javascript,C#/.Net,PHP等编程语言写的程序,可以很容易的消耗和产生JSON数据。而与JSON相关的API和工具十分丰富,这让你很容易的将JSON运用在你喜爱的编程语言,IDE 和运行环境里。此外,流行的NoSQL数据库,诸如MongoDB和ConchBase,都是基于JSON的。 在2001年,JSON被道格拉斯•克罗克福德创建,并在RFC4627与IETF(因特网工程任务组)标准中被规定;详情见 http://tools.ietf.org/html/rfc4627。根据规范,JSON的IANA(互联网数字分配机构)媒体类型是应用/json,文件类型是json。 ## 什么是JSON? JSON是一种简单的数据格式,它有三种基本的数据结构: * 键/值对。 * 对象。 * 数组。 有效的JSON文件总是被大括号围绕,像这样: ~~~ { JSON-Data } ~~~ 请注意,JSON社区的一些成员使用术语“字符串”而不是“文档”来描述JSON 。 ## 为什么要用JSON? 在因特网上,JSON正逐渐代替XML成为首选的数据交换格式,这是因为JSON容易阅读并且它的结构匹配常见的编程概念,诸如对象和数组。JSON也比XML更高效(即更快的解析和网络传输),这是因为JSON更紧凑——没有开始和结束标签。 ### 键/值对 键/值对看起来像这样: ~~~ { "firstName": "John" } ~~~ 属性名(即第一个名字)是被双引号环绕的字符串。值可以是字符串(如上面的例子),但这仅是有效数据类型中的一组。(请查看数据类型章节获取更多细节。)一些著名的科技公司申称他们使用JSON数据格式,但是他们并不用引号环绕他们的字符串。然而,这不是有效的JSON;请查看JSON验证章节获得更多信息。 ### 对象 对象是无序键/值对的集合。下面的例子展示了一个地址对象: ~~~ { "address" : { "line1" : "555 Main Street", "city" : "Denver", "stateOrProvince" : "CO", "zipOrPostalCode" : "80202", "country" : "USA" } } ~~~ 对象(这里是指地址)被环绕在大括号里,由一对对被逗号分割的键/值对组成。 ### 数组 数组是有序值的集合,数组看起来像这样: ~~~ { "people" : [ { "firstName": "John", "lastName": "Smith", "age": 35 }, { "firstName": "Jane", "lastName": "Smith", "age": 32 } ] } ~~~ ### 值类型 值(即键/值对右手边的)可以是下列任一类型: * 对象 * 数组 * 字符串 * 数字 * 布尔值 * null 数字 数字可以是整数或者双精度浮点型。这里有一些例子: “age”: 29 ~~~ "cost": 299.99 "temperature": -10.5 "speed_of_light": 1.23e11 "speed_of_light": 1.23e+11 "speed_of_light": 1.23E11 "speed_of_light": 1.23E+11 ~~~ 属性名(如age等)是被双引号环绕的字符串,但是值没有引号。数字可以有负号。紧跟在数值后面的指数部分(记作e或E),可以选择正负号。将0,八进制放在数值前是不被允许的,十六进制同样不被允许 。 ### 布尔值 在JSON里,布尔值要么是真,要么是假,如下: ~~~ { "emailValidated" : true } ~~~ 属性名(emailVaild)是被双引号环绕的字符串,但是值(true)没有引号。 ### null 虽然从技术层面上说null不是一个数据类型,它是一个特殊的值,可以用来表示数据元素没有值。在下面的例子里, 年龄的作用域没有值(也许是因为用户选择不填写这个信息): ~~~ { "age" : null } ~~~ ### 注释 JSON不允许有注释。注释原本是JSON的一部分,但是开发者将解析指令放入注释中,这极大地滥用了它们。当道格拉斯•克罗克福德看见开发者如此实践时,他从JSON里移除了注释,以此保持计算机平台的互操作性。 ### 样式 也许你已经注意到属性名(及冒号的左边)使用了驼峰命名法。这不是一个准则或者标准,但是一个约定俗称的规定,这个规定被写在在谷歌的JSON样式指南里: http://google-styleguide.googlecode.com/svn/trunk/jsoncstyleguide.xml. ### 官方语法 道格拉斯•克罗克福德的JSON网站(http://www.json.org)提供了JSON语法的完整描述。 此外,JSON Pro Quick Guide (在iphone苹果商店里可免费获取)提供了样例和JSON语法的概述。