抛弃XML,JSON几大使用要点教给你!

JavaScript对象标记是基于键值对和有序列表的结构化数据基于文本的表示。尽管JSON源自JavaScript,但它在大多数主要的编程语言中都是通过本地或库来支持的。JSON通常用于在Web客户端和Web服务器之间交换信息。

在过去15年,JSON已经在网络上普遍存在。今天,它几乎是所有公开Web服务的首选格式,同时也经常用于私人网络服务。

JSON的受欢迎程度导致许多数据库的本机JSON支持。关系数据库,如PostgreSQL和MySQL,现在支持存储和查询JSON数据。MongoDB和Neo4j等NoSQL数据库也支持JSON,尽管MongoDB在后台使用了稍微修改后的JSON二进制版本。

下面我们来看一下JSON,并讨论它的来源,它与XML相比的优势和它的缺点等等。首先,我们从一个例子开始:

上面的结构清楚定义了一个人的某些属性。它包括姓氏,已登录次数,是否为作家,所在公司名称以及所养宠物名单和类型(在本例中仅一个)。类似于上述的结构可以从服务器传递到web浏览器或移动应用,然后这些应用将执行诸如显示数据或保存数据之类的操作以备日后参考。

JSON是一种通用数据格式,其数值类型最少:字符串,数字,布尔值,列表,对象和空值。虽然符号是JavaScript的一个子集,但这些类型都以所有常见的编程语言表示,使得JSON成为跨越语言差距传输数据的良好候选者。

为什么要使用JSON?

要了解JSON的有用性和重要性,我们必须了解一下网络互动历史。

在21世纪初,网络上的互动开始发生转变。当时,浏览器主要作为一个愚蠢的客户端显示信息,服务器做了所有努力准备显示内容。当用户点击浏览器中的链接或按钮时,将向服务器发送请求,服务器将所需的信息转换为HTML,浏览器会向用户呈现一个HTML页面。当要求浏览器重新呈现页面上的所有内容,即使只有一部分页面已更改,这种模式都是缓慢而低效的。

由于全页面重新加载成本高昂,因此网页开发人员开始寻求更新的技术来改善用户体验。同时,在Internet Explorer 5中引入的页面显示时,在后台进行Web请求的能力被证明是加载数据以便显示的可行方法。点击刷新按钮不会重新加载页面的整个内容,而是触发在后台加载的Web请求。加载内容时,可以使用浏览器中的通用编程语言JavaScript(JavaScript)来操纵、保存和显示数据。

最初,数据以XML格式传输(参见下面的示例),但XML在JavaScript中是冗长和难以管理的。JavaScript已经有对象,这是一种在语言中表达数据的方法,所以Douglas Crockford将该表达式的一部分作为新的数据交换格式规范,并将其称为JSON。JSON可以让人们更容易阅读,并让浏览器进行解析,很快Web开发人员喜欢JSON就胜过XML了。

到目前为止,JSON是用于在网络和移动客户端和后端服务之间交换数据的事实标准。

JSON与XML

如上所述,JSON替代了XML,XML在新系统中越来越少见,很容易看出为什么。以下是上面那个示例的XML版本:

除此之外,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不是一个坏的选择,仍然可能正是你需要的,但不如上述两个效果好。

如果你正在使用NoSQL数据库,在支持JSON作为类型的关系数据库中,一个很好的经验法则是尽可能少地使用它。针对符合特定模式的结构化数据调整关系数据库。虽然大多数支持JSON形式更灵活的数据,但在查询这些JSON对象属性时,性能将会受到影响。

JSON是用于在Web服务器、浏览器和移动应用程序之间发送数据的格式。其简单的设计和灵活性使其易于阅读和理解,在大多数情况下,程序员可以轻松地以所选择的编程语言进行操作。缺乏严格的架构可以实现格式的灵活性,但这种灵活性有时难以确保正确阅读和编写JSON。

程序员可能需要多做一些工作来处理像Scala或Elm这样的强类型语言中的JSON,但广泛采用JSON意味着有库和实用程序来帮助完成所有最难的部分。 在构建新的Web服务时,选择JSON可能表示对相关领域缺乏了解。

本文转自d1net(转载)

时间: 2024-10-07 21:55:39

抛弃XML,JSON几大使用要点教给你!的相关文章

xml,json未必是最好的数据传输方案,csv或许更适合

当数据结构简单到二维表格足够可以描述格式的时候, 逗号间隔表示列,\r\n表示行,而第一行则是对应的属性名称. like: colName1, colName2, colName3 1,"title","http://ss.ss.com/ss" 2,"title","http://ss.ss.com/ss" 3,"title","http://ss.ss.com/ss" 这样,去掉了xm

使用XStream在JavaBean与XML/JSON之间相互转换

XML 和 JSON 是当今常用的两种数据描述与传输的格式,特别是涉及到 JS 时使用 JSON 颇为频繁.自然,在Java的世界里少不了完成JavaBean 与这两种格式相互转换的组件,那就是 XStream 和 JSON-lib.这里我简单记下XStream 的用法. 其实相类似的工具早已有之.如果用过 DWR 的同志,一定有印像,DWR 进行远程方法调用时也能为你完成 JavaBean 和 JSON 格式的双向转换的,所依赖的是它的各种 Converter.再要是对 Struts1 的细节

windows phone8.1:Xml,Json序列化和反序列化

原文:windows phone8.1:Xml,Json序列化和反序列化 小梦本例主要实现以下四点内容: 将Car对象序列化为xml 将Car对象序列化为Json 将xml反序列化为Car对象 将json反序列化为json对象 Car类如下: [task]public class Car{public int Id { get; set; }public string Make { get; set; }public string Model { get; set; }public int Ye

JQuery的ajax获取数据后的处理总结(html,xml,json)_jquery

1.html处理比较简单,直接输出即可.一般用$("jb51div").innerHTML等即可 2.json格式数据调用 复制代码 代码如下: $.ajax({ url : "/trundle/RawContentAction.getAjaxContent.act", data : "param1=22", dataType : "json",//这里的dataType就是返回回来的数据格式了html,xml,json ca

xml,json,html格式化工具

     在开发过程中,经常会对xml,json,html数据打交道,查看这三类数据时,有一个快捷的格式化工具,往往能大大的提高效率.结合多方资源,本人写了个小工具,对这三类数据进行格式化,不废话了,贴图贴代码: 程序界面: 程序下载:http://download.csdn.net/detail/a497785609/4170938 源码下载:http://download.csdn.net/detail/a497785609/4170947 1.Xml格式化: using System; u

Python 提取dict转换为xml/json/table并输出的实现代码_python

核心代码: #!/usr/bin/python #-*- coding:gbk -*- #设置源文件输出格式 import sys import getopt import json import createDict import myConToXML import myConToTable def getRsDataToDict(): #获取控制台中输入的参数,并根据参数找到源文件获取源数据 csDict={} try: #通过getopt获取参数 opts,args=getopt.geto

js select 省市级联菜单(读取xml json)

<script type="text/网页特效" src="../jquery-1.3.2.min.js"></script> <script type="text/javascript"> function loadxml(xmlpath){  var xmldoc=null;  if (window.activexobject){   xmldoc=new activexobject("micro

JSON的一些要点总结 good

JavaScript Object Notation CSRF (pronounced sea-surf) 字面量(literal):字符串的意思和要表达的意思是一致的 JSON 是一种数据交换格式(因此没有指令).可以使用Schema来校验一致性(可以有那些属性,以及取值范围 等待)JSON的数据类型:(1)对象:必须以"{"开始,以"}"结束(2)数组:只能保存同样的数据类型和null.必须以"["开始,以"]"结束(3)

Ajax如何传输Json和xml数据_AJAX相关

ajax传输xml数据:只要把数据封装成xml格式就可以实现传输,前台js用responseXML接收xml参数,后台读取用流和dom4j来解析 前台页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix=&q