XML  和  JSON 语言  本篇博客来自互联网参考

XML 和 JSON 的互相转化

  • 有属性的转化为对象,无属性的转化为字符串
  • 节点的顺序性不可逆,XML有顺序,JSON 无顺序

XML 和 JSON 的对比

XMl适合于较复杂的数据结构,而JSON 适合简单的数据结构。前者传输速度较慢,后者较快。

注意:下面的 JSON 数据里 没有双引号的数字 是个对象 NSNumber 对象。
"wish": 7609,
"original_title": "港囧",
"id": "25710912",
"orignal_title": "港囧",
"collection": 51265

数据解析参考:参考

XML与JSON的对比

1、各自定义

XML

扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。
XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

JSON建构于两种结构:

“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

关于JSON的更多描述,可见:http://json.org

2.XML和JSON对比

XML

1)应用广泛,可扩展性强,被广泛应用各种场合
2)读取、解析没有JSON快
3)可读性强,可描述复杂结构

XML的应用已经深入人心,不再赘述。

JSON
1)结构简单,都是键值对。
2)读取、解析速度快,很多语言支持
3)传输数据量小,传输速率大大提高

4)描述复杂结构能力较弱

JavaScript、PHP等原生支持,简化了读取解析。成为当前互联网时代普遍应用的数据结构。

3、XML与JSON转换

常常会用到XML与JSON之间的转换,在这里可以更加清晰了解两者之间的区别。

1)常规转换

常规的节点转换,以下的案例能够直观的看到彼此之间的转换原理。

XML是节点名与值,JSON也是KEY与VALUE的键值对。这样的转换是最简单的。

XML:

<Student>张三</Student>

转为JSON:

{ "Student": "张三" }

这个过程是可逆的,JSON可以很简单转为XML。

2) XML节点含有属性

节点含有属性,其转换就不同了,在JSON中,XML属性也作为了JSON对象的属性,为了区别与其他的节点,这里节点名增加特殊的前缀标识"@"以标识是属性,

另外一个比较奇怪的是,节点的值,增加属性名,且有特殊前缀,“#text”。这样的处理可以使得XML与JSON的转换实现可逆操作。JSON中@开头的,转为XML时,需要生成节点属性,#text则为节点的内容。这里的转换是常用的转换器的通用做法。

以下的转换例子

XML:

<Student ID="1001">张三</Student>

转为JSON

{
"Student": {
"@ID": "1001",
"#text": "张三"
}
}

3)有属性的节点生成对象

例1,无属性节点,简单的字符串数组

<line>
<item>name</item>
<item>age</item>
</line>

转为JSON:

{
"line": {
"item": [
"name",
"age"
]
}
}

例2,有属性的转为对象,无属性的则直接转为字符串

有属性节点

<line>
<item font-size="20">name</item>
<item>age</item>
</line>

转为JSON:

{
"line": {
"item": [
{
"@font-size": "20",
"#text": "name"
},
"age"
]
}
}

4) XML的节点顺序性

XML存在着节点之间的顺序,但当转为JSON后,有时顺序会被打乱。

这一点,可以解释XML与JSON的一大不同,描述结构顺序性,特别是复杂结构时,JSON没有XML清晰简单。

以下的例子,我们可以清晰看到这一点,转换不可逆。

例子:

XML:

<template>
<block>天空</block>
<line>地平线</line>
<block>地下</block>
</template>

转变为JSON:

{
"template": {
"block": [
"天空",
"地下"
],
"line": "地平线"
}
}

在这里,我们可以看到在JSON中,将两个block放到了一起,中间的line则放到了后面,XML原有的节点顺序就此打乱。

如果想从此JSON转为原来的XML,已经不可能。

如果非要较真,当然可以在JSON中指定具体的属性,标识其顺序或者前后节点之间的关系,但是这样做,确实增加复杂度。

4、XML的属性与元素对比

属性无法包含多重的值(元素可以)
属性无法描述树结构(元素可以)
属性不易扩展(为未来的变化)
属性难以阅读和维护

如下的XML感觉很愚蠢:

<message time="2014-10-01 10:10:02" to="Lucy" from="Jim" body="Don't forget the meeting!"></message>

应该为:

<message>
<from>Jim</from>
<to>Lucy</to>
<time>2014-10-01 10:10:02</time>
<body>Don't forget the meeting!</body>
</message>

原则:

元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。

5、建议选择原则

1)对于复杂的数据结构使用XML,简单的数据结构可采用JSON。

2)在互联网应用中数据传输中,提倡使用JSON。

3)针对前后端的差异,可以在服务端使用XML,在前端使用JSON,两者之间的转换在服务器端完成。这样可以各取所长。

UI:数据的解析XML与JSON的更多相关文章

  1. boost-使用property_tree来解析xml、json

    property_tree是一个保存了多个属性值的树形数据结构,可以用来解析xml.json.ini.info文件.要使用property_tree和xml解析组件的话需要包含"boost/ ...

  2. Python解析xml与JSON

    xml与json是常用的文件交换格式,常用来表示网页的html则是xml的变种.解析xml和json在web开发中有着重要应用. DOM解析XML 文件对象模型(Document Object Mod ...

  3. ios解析XML和json数据

    解析的基本概念所谓“解析”:从事先规定好的格式串中提取数据解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据iOS开发常见的解析:XML解析.JSON解析 一.XML数 ...

  4. IOS 请求数据解析 XML 和 JSON

    好久没写文章了,回忆一下以前的内容记录一下吧. 这一段主要接触的就是数据解析,就说一下数据解析 现在数据解析一般解析两种数据 xml 和 JSON 那就从xml解析说起吧 xml解析需要用到一个类 N ...

  5. Java 常见数据交换格式——xml、json、yaml

    目录 数据交换格式介绍 XML 使用DOM方式解析 使用SAX方式解析 使用DOM4J方式解析 使用JDOM方式解析 JSON 使用JSONObject方式将数据转换为JSON格式 利用JSONObj ...

  6. android基础篇------------java基础(11)(文件解析xml and Json )

    一:xml文件解析 首先看一下:我们要解析的内容: <?xml version="1.0" encoding="gbk" ?> - <book ...

  7. 数据交换格式XML和JSON对比

    1.简介: XML:extensible markup language,一种类似于HTML的语言,他没有预先定义的标签,使用DTD(document type definition)文档类型定义来组 ...

  8. 在SQL Server中将数据导出为XML和Json

        有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做 ...

  9. C#合成解析XML与JSON

      http://www.xuanyusong.com/archives/1901  XML与JSON在开发中非常重要, 其实核心就是处理字符串.一个是XML的字符串一个是JSON的字符串,尤其是在处 ...

随机推荐

  1. 用svn下载github中指定目录的文件

    1.先用命令看看github的分支 svn ls https://github.com/BlueRiverInteractive/robovm-ios-bindings 输出: branches/ t ...

  2. Flatten Binary Tree to Linked List (DFS)

    Given a binary tree, flatten it to a linked list in-place. For example,Given 1 / \ 2 5 / \ \ 3 4 6 T ...

  3. Java加载配置文件类

    /** *  对应配置文件类, */ package com.up72.parkSys.ThirdParty; import java.io.IOException;import java.io.In ...

  4. Android开发艺术-第二章 IPC 机制

    2.1 Android IPC 简单介绍 IPC 意为进程间通信或者跨进程通信,线程是 CPU 调度的最小单元,是一种有限的系统资源. 进程一般指一个执行单元.不论什么操作系统都须要对应的 IPC 机 ...

  5. 【LeetCode-面试算法经典-Java实现】【066-Plus One(加一)】

    [066-Plus One(加一)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a non-negative number represented as ...

  6. [原创+分享]Mandelbrot Explorer

    Mandelbrot Explorer 是一款用于在MandelBort集/Julia集上进行无限漫游的软件,使用VS2013+CUDA6.5开发而成.它也是我学习CUDA开发的一个小小的成果,欢迎大 ...

  7. 3 Angular 2 快速上手启动项目Demo

    Angular2.x与Angular1.x 的区别类似 Java 和 JavaScript 或者说是雷锋与雷峰塔的区别,想要运行Angular2需要安装一些第三方依赖,不会像Angular1.x那样, ...

  8. win7-64bit安装comtypes的问题

    Update 28/12/2014: Please download the latest comtypes 1.1.1 from https://pypi.python.org/pypi/comty ...

  9. Ubuntu x86 64 settup nginx rtmp server

    常常搭建nginxserver,可是好像每次的情况都不同,这次具体记录这个过程: 平台:unbutu 10.04 内核:2.6.32-33-generic 1, 编译环境搭建. sudo apt-ge ...

  10. Bean Query 第一个版本号(1.0.0)已公布

    BeanQuery 是一个把对象转换为Map的Java工具库. 支持选择Bean中的一些属性.对结果进行排序和依照条件查询. 不只能够作用于顶层对象,也能够作用于子对象.很多其它具体的介绍能够看我的博 ...