自问: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在内的很多程序都用它作为配置文件格式。
分享到:
相关推荐
将XML数据转化为JSON格式 使用方法: 1.添加对XmlToJSON.dll的引用 2. string JSON = XmlToJSON.Converter.XmlToJSON(xmlDoc); 示例: XmlDocument doc = new XmlDocument(); //doc.LoadXml(@"<root>aaa</root>...
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;
jQuery xml-to-json xml转JSON jQuery实现xml转JSON插件 有demo和相关文档
XML to JSON and JSON to XML converter
js下xml转json和json转xml
本实例主要是通过json-libjar包中的工具类进行操作,简单实现了xml字符串和json字符串之间的转化,xml文件和json文件的转化。而且还兼容jsonObject和jsonArray两种格式,自己摸索,记录一下以便学习。
xml转json所需要的jar包xml转json所需要的jar包xml转json所需要的jar包xml转json所需要的jar包xml转json所需要的jar包
jquery.json2xml.js&&jquery.xml2json.js在jQuery的基础上实现json与xml的相互转换
java工程源码实现xml和json的互转,工程已包含所jar包:commons-beanutils-1.7.0.jar、commons-collections-3.1.jar、commons-lang-2.5.jar、commons-logging.jar、ezmorph-1.0.3.jar、json-lib-2.4-jdk15.jar、xom-...
xml字符串转换json格式 可用于微信小程序xml字符串转换json格式 安装 npm方式安装 npm install --save xmlstring2json bower方式安装 bower install xmlstring2json 用法示例: bookstore.xml文件 <title>...
java的xml和json相互转换工具类,亲测直接用
xml转json,或xml转array xml转json,或xml转array
editor提取的xml转成特定格式的json
xml转json,简单demo,工具类,java开发,XML、JSON、WEB开发应用
XML转JSON工具类,支持多层XML嵌套解析转JSON,采用dom4j解析转JSON格式,多次线上环境使用
实现的一个简单的基于java 的,可以在xml和json之间相互转换的工具类,因为实在没有积分了,所以要点积分,希望理解~
xml2json.php
Xml2Json转换器,使用GUI的简单转换工具(用JavaFX编写) , 用于将大型 XML文件转换为json和json to XML, 有指示进度并使用少量内存进行转换。从1.2.0 版应用程序开始, 支持从目录批量转换文件的模式。 JSON和XML的...
Jquery插件,将xml转为json对象
Java XML转JSON,只要一个积分!