`
cloverprince
  • 浏览: 129463 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

我讨厌XML,还是JSON好。

    博客分类:
  • WWW
阅读更多
自问:XML是什么?
自答:XML就是:
  • 文本
  • 元素(元素包括名称、属性和其他子节点)
  • 以及以上几种东东的有穷组合。

嗯。就是这些。比如
<my-doc>
  <title>Hello World</title>
  <some-element type="int" description="The answer to everything">42</some-element>
  <comment />
</my-doc>

那么,“Hello World”是文本,“42”是文本,“int”, "The answer to everything"也是文本。而<my-doc>,<title>,<some-element>是元素,type是<some-element>的属性,description也是。XML只不过是文本和元素的各种组合而已。

以上说的很片面。全面的介绍请看:http://www.w3.org/standards/xml/core
有疑问的话,这个说的算:http://www.w3.org/TR/2008/REC-xml-20081126/


自问:JSON什么是?
自答:JSON就是:
  • null
  • 布尔值(true, false)
  • 数字(整数、浮点数)
  • 字符串
  • 数组(包含有序的几个JSON值)
  • 对象(包含几对“字符串”到“JSON值”的配对)
  • 以上东东的有穷组合。

嗯,就是这些。或者,说的简单一些,就是:
  • 标量(包括null、布尔值、数字、字符串)
  • 数组(包含有序的几个JSON值)
  • 对象(包含几对“字符串”到“JSON值”的配对)
  • 以上东东的有穷组合。

比如:
"Hello World"
就是一个JSON值,它是一个字符串。
又如
{
    "name": "Hello World",
    "anEmbededList": [null, true, false, 42, 3.14, "blah"],
    "anEmbededObject": {"a": 100, "b": true}
}

它就是一个对象,内嵌了"name","someNumber","anEmbededObject"这几个属性,各自有对应的嵌套的值。

当然,以上是介绍,详细情况看:http://json.org/
如果对任何地方有异议,这个最权威:http://www.ietf.org/rfc/rfc4627.txt

自问:XML在程序设计语言里如何表示呢?
自答:DOM吧。
(SAX、PullParsing是处理方式,DOM是数据结构。)
XML文档由节点的有穷组合构成。文本就是Text节点,元素是Element节点,可以包含很多Attr节点和很多子节点(各种类型)。这是标准的,什么语言都可以构造这样的数据结构。

可是呢,DOM毕竟是一套“外来”的数据结构,就像身体内的“异物”,也像Hook船长的铁钩手,再强大也不是身体的一部分。总之,XML永远是外语,永远不是任何语言的一部分,永远要用DOM专用对象专用方法处理(Scala用户可以华丽地鄙视这一论调)。

自问:JSON在程序设计语言里如何表示呢?
自答:JSON就是JavaScript本身的基本数据结构呀!!上述那两个JSON都是合法的JavaScript字面值。

python的话,也很简单:
{
    "name": "Hello World",
    "anEmbededList": [None, True, False, 42, 3.14, "blah"],
    "anEmbededObject": {"a": 100, "b": True},
}

和JSON的写法没差多少吧。但它是合法的Python字面值。Python标准库里的json模块可以帮你把它转换成字符串形式的JSON,传给网页里的JavaScript用。

Perl语言呢?
Linux用户请输入:man perlintro
引用
Perl variable types
       Perl has three main variable types: scalars, arrays, and hashes.

看到了吗?Perl的主要数据类型是“标量”,“数组”和“哈西”。JSON呢?也是“标量”、“数组”,“对象(相当与哈西)”。所以,JSON和Perl的基本数据结构也是对应的。去CPAN上能找到JSON处理器。

如果你用Java,也没关系。null对应空指针,true,false对应boolean,整数对应int, long, 或者BigInteger,浮点数对应float, double或者BigDecimal,数组对应List<Object>,对象对应Map<String, Object>(JSON的对象的key必须是字符串)。所以,你可以用Java这样构造上述值:
Map<String, Object> m = new LinkedHashMap<String, Object>();
m.put("name", "Hello world!");
List<Object> l = new ArrayList<Object>();
l.add(null); l.add(true); l.add(false); l.add(42); l.add(3.14); l.add("blah");
m.put("anEmbededList", l);
Map<String, Object> m2 = new LinkedHashMap<String, Object>();
m2.put("a", 100); m2.put("b", true);
m.put("anEmbededObject", m2);
System.out.println(m);

输出结果:
引用

{name=Hello world!, anEmbededList=[null, true, false, 42, 3.14, blah], anEmbededObject={a=100, b=true}}

输出和JSON差不多吧。

用Jackson库(http://jackson.codehaus.org/)可以帮你把它转换成JSON(就是其字符串或者字节串表示)。也可以帮你把字符串表示的JSON转换成List, Map什么的。甚至直接把JSON Object作为Java Bean的属性名,构造成Java对象。

所以,JSON是任何语言的一部分,在任何语言里都是普通话!(C语言用户可以华丽地鄙视上述论调)

自问:那,有什么适合XML而不适合JSON的工作呢?
自答:比如这个:
<para>This is a [i]really[/i] [i]really[/i] <strong>important</string> thing!!!
See [url=http://www.example.com]this page[/url] for more details.</para>

用JSON就必须这样:
{
  "type": "paragraph",
  "nodes": [
    "This is a ",
    {"type": "emphasis", "value": "really"},
    " ",
    {"type": "emphasis", "value": "really"},
    " ",
    {"type": "stronglyEmphasis", "value": "important"},
    " thing!!!\nSee "
    {"type": "hyperlink", "reference": "http://www.example.com/",
        "value": "this page"},
    " for more details."
  ]
}

因为JSON不适合在文本中间插入乱七八糟的东东。当然,
"This is a *really* *really* **important** thing!!! See [http://www.example.com|this page] for more details."

是可以的。所以:
  • JSON更适合结构化的数据。
  • XML更适合“文档”。

忘了说了,XML不区分42和"42"(注意引号),而JSON是区分的。还有,XML元素属性(Attr)必须是标量(自己用逗号隔开也行,用“|”隔开也行,没有标准)。

注:嫌JSON不好看,请用YAML。http://yaml.org/,本质上和JSON是等价的,语法上是JSON的超集。包括Ruby On Rails和Google App Engine在内的很多程序都用它作为配置文件格式。
2
3
分享到:
评论
2 楼 jzinfo 2011-07-17  
xml 是标准
1 楼 deepnighttwo 2011-07-16  
顶,个人觉得如果是传输和表达数据,json是比xml更好的选择。xml有自己的特性,代价就是变得更复杂,如果用不着这些新特性,那就是徒有复杂了。

相关推荐

    java的xml和json相互转换工具类,亲测直接用

    在Java开发中,XML(可扩展标记语言)和JSON(JavaScript Object Notation)是两种常见的数据交换格式。它们各自有着不同的特性和应用场景,但有时我们需要将XML数据转换为JSON,或者将JSON数据转换为XML,以满足...

    Jquery xml2Json

    XML(Extensible Markup Language)和JSON(JavaScript Object Notation)是两种常见的数据交换格式,它们在Web开发...通过深入理解这个插件的工作原理和使用方法,开发者可以更好地应对涉及XML和JSON转换的项目需求。

    jquery.json2xml.js和jquery.xml2json.js

    总之,`jquery.json2xml.js` 和 `jquery.xml2json.js` 是jQuery的两个强大工具,它们使开发者能够轻松地在JSON和XML之间进行转换,从而更好地适应不同的数据处理需求。在实际项目中,它们可以极大地提高开发效率,...

    XML to JSON and JSON to XML converter

    XML(Extensible Markup Language)和JSON(JavaScript Object Notation)是两种广泛用于数据交换和存储的格式。XML是一种结构化标记语言,适用于描述复杂的数据结构,而JSON则以更简洁的格式来表示数据,通常用于...

    xml转json所需要的jar包

    XML(Extensible Markup Language)和JSON(JavaScript Object Notation)是两种常见的数据交换格式,广泛应用于Web服务和数据传输。XML以其丰富的结构化特性而闻名,而JSON则以简洁和易于解析的优势受到青睐。在...

    将XML转为JSON格式字符串

    将XML数据转化为JSON格式 使用方法: 1.添加对XmlToJSON.dll的引用 2. string JSON = XmlToJSON.Converter.XmlToJSON(xmlDoc); 示例: XmlDocument doc = new XmlDocument(); //doc.LoadXml(@"&lt;root&gt;aaa&lt;/root&gt;...

    js下xml转json和json转xml

    在JavaScript(JS)环境中,XML(Extensible Markup Language)与JSON(JavaScript Object Notation)之间的转换是常见的数据处理任务。XML是一种结构化数据格式,常用于数据交换,而JSON则是轻量级的数据交换格式,...

    xml & json 转换工具

    XML(Extensible Markup Language)和JSON(JavaScript Object Notation)是两种广泛用于数据交换的格式。它们各有特点,XML提供丰富的结构化标记,适合复杂的文档描述,而JSON因其简洁和易于阅读,通常在Web服务中...

    xml2jsonjar包

    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream;...import net.sf.json.xml.XMLSerializer;

    java实现Xml与json之间的相互转换操作示例

    Java实现Xml与json之间相互转换操作的知识点主要包括以下几个方面: ...以上就是java实现Xml与json之间相互转换操作的知识点,希望这些知识点能够帮助大家更好地理解和掌握Java实现xml与json之间相互转换的操作技巧。

    Android中xml转json

    在Android开发中,XML(可扩展标记语言)和JSON(JavaScript Object Notation)都是常见的数据交换格式。XML因其结构化特性适用于复杂的文档存储,而JSON则以其轻量级、易于阅读和编写的特点广泛用于Web服务的数据...

    JS xml转json

    - 使用`JSON.stringify`方法将处理好的数组转换为JSON格式的字符串。 #### 五、代码示例 ```javascript // 获取编辑器内容 var xmlContent = UE.getEditor('editor').getContent(); // 处理XML内容 var arrData ...

    Java XML转JSON

    在IT行业中,XML(eXtensible Markup Language)和JSON(JavaScript Object Notation)是两种广泛使用的数据交换格式。XML以其结构化特性适用于复杂的、层级式的数据存储,而JSON因其简洁明了、易于读写的特点,常...

    xml/Json转换工具类

    XML(Extensible Markup Language)和JSON(JavaScript Object Notation)是两种广泛用于数据交换的格式。在Java开发中,我们经常需要将XML数据转换为JSON,或者反之,以便于前端和后端之间的通信。本篇将详细介绍...

    前端开源库-xml2json

    【前端开源库-xml2json】是一个用于前端开发的开源工具,主要功能是将XML数据格式转换成JSON格式,同时也支持将JSON数据转换回XML。这个库基于Node.js的expat模块,它是一个高效的XML解析器,适用于处理大量的XML...

    XML与JSON文件代码例子

    选择XML还是JSON,通常取决于具体需求,如数据的复杂性、文件大小、解析速度和开发语言的兼容性等因素。 在处理XML和JSON时,开发者可以使用各种库或工具。例如,在JavaScript中,有内置的`XMLHttpRequest`用于发送...

    java实现xml转json

    4. **测试与调试**:在Eclipse中编写好代码后,你可以使用内置的Java应用程序运行配置来运行代码,查看XML转换为JSON的结果。如果出现错误,Eclipse会提供详细的堆栈跟踪信息,帮助你定位问题。 5. **注意事项**:...

    XML与JSON相互转化

    XML(Extensible Markup Language)和JSON(JavaScript Object Notation)是两种广泛用于数据交换的格式。它们各有特点,适应不同的应用场景。XML是一种结构化的标记语言,适用于复杂的文档结构和数据组织,而JSON则...

    jquery-xmlToJson.js

    在IT行业中,XML(eXtensible Markup Language)和JSON(JavaScript Object Notation)是两种广泛使用的数据交换格式。XML由于其丰富的结构和强大的描述能力,常用于存储和传输复杂的数据,而JSON则以其简洁、易读且...

    XML转换为JSON(支持多种方法)

    在IT行业中,XML(Extensible Markup Language)和JSON(JavaScript Object Notation)是两种广泛用于数据交换的格式。XML以其丰富的结构化特性适用于复杂的文档表示,而JSON则因其简洁、易于阅读和处理的特性,成为...

Global site tag (gtag.js) - Google Analytics