什么是JSON? 更好的数据交换格式

JavaScript Object Notation是基于键值对和有序列表的结构化数据的无模式,基于文本的表示形式。 尽管JSON是从JavaScript派生的,但本机或大多数主要编程语言中的库都支持JSON。 JSON通常(但非排他性)用于在Web客户端和Web服务器之间交换信息。

在过去的15年中,JSON在网络上变得无处不在。 如今,它已成为几乎所有公开可用的Web服务的首选格式,并且也经常用于私有Web服务。

[Git要点: Git版本控制入门 Git和GitHub的20个基本指针 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

JSON的流行还导致许多数据库都支持本机JSON。 关系数据库(如PostgreSQL和MySQL)现在附带了对存储和查询JSON数据的本机支持。 像MongoDB和Neo4j这样的NoSQL数据库也支持JSON,尽管MongoDB在后台使用了经过稍微修改的JSON二进制版本。

在本文中,我们将快速了解JSON,并讨论JSON的来源,相对于XML的优势,劣势,何时使用以及何时考虑替代方案。 但是首先,让我们深入了解JSON在实际中的模样。

JSON范例

这是使用JSON编码的数据的示例:

{
  “firstName”: “Jonathan”,
  “lastName”: “Freeman”,
  “loginCount”: 4,
  “isWriter”: true,
  “worksWith”: [“Spantree Technology Group”, “InfoWorld”],
  “pets”: [
    {
      “name”: “Lilly”,
      “type”: “Raccoon”
    }
  ]
}

上面的结构清楚地定义了一个人的某些属性。 它包括名字和姓氏,该人登录的次数,该人是否是作家,该人与其合作的公司的列表以及该人的宠物的列表(在这种情况下,只有一个)。 可以将上述结构从服务器传递到Web浏览器或移动应用程序,然后它们将执行某些操作,例如显示数据或保存数据以供以后参考。

JSON是一种通用数据格式,具有最少数量的值类型:字符串,数字,布尔值,列表,对象和null。 尽管该符号是JavaScript的子集,但是这些类型在所有常见的编程语言中都可以表示,这使得JSON成为跨语言鸿沟传输数据的理想选择。

JSON文件

JSON数据存储在扩展名为.json的文件中。 为了符合JSON的人类可读性,这些只是纯文本文件,可以轻松打开和检查。 正如SQLizer博客解释的那样 ,这也是JSON更广泛的互操作性的关键,因为几乎每种您可以命名的语言都可以读取和处理纯文本文件,并且它们很容易通过Internet发送。

为什么要使用JSON?

要了解JSON的有用性和重要性,我们必须对网络交互的历史有所了解。

在2000年代初期,网络上的交互性开始发生变化。 当时,浏览器主要充当笨拙的客户端来显示信息,而服务器则做了所有艰苦的工作来准备要显示的内容。 当用户单击浏览器中的链接或按钮时,请求将发送到服务器,服务器将需要的信息准备为HTML,浏览器会将HTML渲染为新页面。 这种模式比较缓慢且效率低下,即使浏览器的一部分已更改,也要求浏览器重新呈现页面上的所有内容。

由于整页重新加载的成本很高,因此Web开发人员希望使用较新的技术来改善整体用户体验。 同时,最近在Internet Explorer 5中引入的在显示页面时在后台发出Web请求的功能被证明是一种可行的增量加载数据以供显示的方法。 单击而不刷新页面的全部内容,而是单击刷新按钮将触发将在后台加载的Web请求。 加载内容后,可以使用JavaScript(浏览器中的通用编程语言)来操纵,保存数据并将其显示在页面上。

REST与SOAP:JSON连接

最初,此数据是使用称为SOAP(简单对象访问协议)的消息传递协议以XML格式(请参见下面的示例)传输的。 但是XML非常冗长,并且很难用JavaScript进行管理。 JavaScript已经有了对象,这是在语言中表达数据的一种方式,因此Douglas Crockford将该表达式的子集作为一种新数据交换格式的规范,并将其称为JSON。 JSON对于人们来说更容易阅读,对于浏览器来说更容易解析。

在20年代,另一种Web服务技术,称为代表性状态传输(REST),开始超过SOAP来传输数据。 使用REST API进行编程的最大优势之一是,您可以使用多种数据格式-不仅是XML,还可以使用JSON和HTML。 随着Web开发人员开始偏爱JSON而不是XML,他们也开始偏爱REST而不是SOAP。 正如Kostyantyn Kharchenko在Svitla博客所说的那样 ,“在很多方面,REST的成功都归功于JSON格式,因为它易于在各种平台上使用。”

如今,JSON已成为事实上的标准,用于在Web和移动客户端以及后端服务之间交换数据。

JSON与XML

如上所述,JSON的主要替代方法是XML。 但是,XML在新系统中变得越来越普遍,并且很容易理解为什么。 下面是您在XML中看到的上面数据的版本:

<?xml version="1.0"?>
<person>
  <first_name>Jonathan</first_name>
  <last_name>Freeman</last_name>
  <login_count>4</login_count>
  <is_writer>true</is_writer>
  <works_with_entities>
    <works_with>Spantree Technology Group</works_with>
    <works_with>InfoWorld</works_with>
  </works_with_entities>
  <pets>
    <pet>
      <name>Lilly</name>
      <type>Raccoon</type>
    </pet>
  </pets>
</person>

除了更加冗长(在这种情况下,是冗长的两倍)之外,XML在解析为JavaScript友好的数据结构时还引入了一些歧义。 将XML转换为JavaScript对象可能需要数十到数百行代码,最终需要根据要解析的特定对象进行自定义。 将JSON转换为JavaScript对象只需一行代码,并且不需要任何有关要解析的对象的先验知识。

JSON的局限性

尽管JSON是一种相对简洁,灵活的数据格式,可以在许多编程语言中轻松使用,但是该格式存在一些缺点。 这是五个主要限制:

  1. 没有架构。 一方面,这意味着您可以完全灵活地以所需的任何方式表示数据。 另一方面,这意味着您很容易意外地创建了变形的数据。
  2. 仅一种数字类型:IEEE-754双精度浮点格式。 那是一个很大的数目,但这仅意味着您无法利用许多编程语言中可用的各种细微差别的数字类型。
  3. 没有日期类型。 这种遗漏意味着开发人员必须求助于日期的字符串表示形式,从而导致格式差异,或者必须以自纪元(1970年1月1日)以来的毫秒数形式表示日期。
  4. 没意见。 这使得无法内联注释字段,需要附加文档并增加了误解的可能性。
  5. 详细。 尽管JSON不如XML冗长,但它不是最简洁的数据交换格式。 对于大批量或特殊用途的服务,您将需要使用更有效的数据格式。

我什么时候应该使用JSON?

如果要编写与浏览器或本机移动应用程序通信的软件,则应使用JSON作为数据格式。 使用XML之类的格式是一种过时的选择,对于您否则会吸引的前端和移动人才来说是一个危险信号。

对于服务器到服务器的通信,使用诸如Apache Avro或Apache Thrift之类的序列化框架可能会更好。 在这里JSON并不是一个不错的选择,它仍然可能正是您所需要的,但是答案并不像Web和移动通信那样明确。

如果您使用的是NoSQL数据库,那么您几乎会陷入数据库提供的任何问题。 在支持JSON作为类型的关系数据库中,一个好的经验法则是尽可能少地使用它。 关系数据库已针对适合特定模式的结构化数据进行了调整。 虽然大多数现在都支持JSON形式的更灵活的数据,但是在查询那些JSON对象中的属性时,您可以期望性能受到影响。

JSON是一种普遍存在的,事实上的格式,用于在Web服务器,浏览器和移动应用程序之间发送数据。 其简单的设计和灵活性使它易于阅读和理解,并且在大多数情况下,很容易用您选择的编程语言进行操作。 缺少严格的架构会带来格式的灵活性,但是这种灵活性有时会导致难以确保您正确地读写JSON。

JSON解析器

应用程序代码中将以JSON形式存储的数据转换为应用程序可以使用的格式的部分称为解析器。 如您所料,JavaScript包含一个本地解析器JSON.parse()方法

要使用强类型语言(例如Scala或Elm)使用JSON,您可能需要做更多的工作,但是JSON的广泛采用意味着有一些库和实用程序可以帮助您解决所有最困难的部分。

json.org网站包含完整的代码库列表,您可以使用这些代码库来解析,生成和操作JSON,并使用多种语言编写 ,例如Python,C#和COBOL。

JSON实用程序

如果您希望直接操作或检查JSON编码的数据,而无需自己编写代码,那么有许多在线实用程序可以为您提供帮助。 上面链接到的代码库中的所有程序化等效项,但是您可以将JSON代码剪切并粘贴到这些基于浏览器的工具中,以帮助您更好地了解JSON或执行快速,肮脏的分析:

  • JSON格式化程序: JSONLint将格式化和验证任意JSON代码。
  • JSON查看器: Stack.hu有一个站点,该站点将创建一个交互式树以帮助您了解JSON代码的结构。
  • JSON Beautifier:如果您想“漂亮地打印” JSON代码(带有语法着色等), Prettydiff可以为您提供帮助。
  • JSON转换器:是否需要快速将数据从JSON格式移动到其他内容? Convertcsv.com具有可以将JSON转换为CSV (然后可以在Excel中打开)或XML的工具

JSON教程

准备开始学习并了解有关如何在交互式应用程序中使用JSON的更多信息? Mozilla开发人员网络的教程很好,可以帮助您开始使用JSON和JavaScript 。 如果您准备转向其他语言,请查看有关将JSON与Java (来自Baeldung), Python (来自DataCamp)或C# (来自软件测试帮助) 一起使用的教程。 祝好运!

Josh Fruhlinger对本文进行了贡献。

From: https://www.infoworld.com/article/3222851/what-is-json-a-better-format-for-data-exchange.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值