JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大。本文系统的分析两种解析方式的区别,为更好地处理数据作准备。由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和XML解析均是在安卓环境下进行测试。
    首先要明确一点,数据解析是为了获取数据的每一个值,对于JSON数据而言类似于键值对的形式,对于XML而言是标签和值的形式。简单来说就是要在一个JSON数据或XML数据中利用键或标签找到对应值。
    其次要了解一下两种数据的数据结构。JSON数据分为三种:对象类型、数组类型、混合类型。对象类型JSON数据用大括号包裹,属性和值相对应。数组类型JSON数据可以看成多个对象类型JSON数据组合在一起,用中括号包裹。混合类型JSON数据中既有对象类型又有数组类型,大括号表示的是对象,中括号表示的是数组。XML数据以标签的形式进行存储,通过标签名获取值。所以无论是JSON解析还是XML解析,都可以先定义一个双列集合出来,用于存放数据。

JSON数据类型:

在安卓环境下解析JSON数据有两种方式,一种是自定义方法根据数据结构分层解析,另一种是用开源框架。自定义方法进行解析时,又可以分为对象解析、数组解析、综合解析。对象解析较为简单,先创建JSON对象,用对象的GetXxx()的方法获取对应的值,然后存储在集合中,即获取到JSON数据。数组解析先通过JsonArray对象获取JSON对象,然后参照对象解析的方法。综合解析则是在上述两种解析基础上完成的。根据JSON数据的结构,按照顺序一次获取JSON对象和JsonArray对象知道获取到所需数据。用开源框架进行解析基本原理类似,只不过需要提前进行导包,并创建一个方法类来调用包里的内容。
    读取对象类型的JSON数据:

读取数组类型的JSON数据:

读取综合类型的JSON数据:

用开源框架读取JSON数据的目录结构:

XML解析是边读边解析,方法较为固定,从上到下依次解析。首先创建XmlPullParser解析器,利用解析器设置要解析的流对象。然后在一个循环中判断标签类型,如果遇到文件结束标(END_DOCUMENT)签跳出循环,否则进入循环。在循环中在有两种情况,若是开始标签(START_TAG),进入标签内部,根据标签名判断要获取的数据,当标签名和要得到的数据名相同时,用nextText()获取数据。若是结束标签(END_TAG)将获取的数据存入集合。最后一点,不要忘记把标签移向下一个位置,即:type = parser.next()。

XML解析的方法代码:

为更好的演示效果,本文最终做出的案例是用安卓设备从Tomcat服务器上获取到JSON数据和XML数据,然后进行解析,将解析后的结果展示在安卓设备上。

JSON原始数据:

{
"resultcode": "200",
"reason": "查询成功!",
"result": {
"sk": {
"temp": "21",
"wind_direction": "西风",
"wind_strength": "2级",
"humidity": "4%",
"time": "14:25"
},
"today": {
"city": "天津",
"date_y": "2014年03月21日",
"week": "星期五",
"temperature": "8℃~20℃",
"weather": "晴转霾",
"weather_id": {
"fa": "00",
"fb": "53"
},
"wind": "西南风微风",
"dressing_index": "较冷",
"dressing_advice": "建议着大衣、呢外套加毛衣、卫衣等服装。",
"uv_index": "中等",
"comfort_index": "",
"wash_index": "较适宜",
"travel_index": "适宜",
"exercise_index": "较适宜",
"drying_index": ""
},
"future": [
{
"temperature": "28℃~36℃",
"weather": "晴转多云",
"weather_id": {
"fa": "00",
"fb": "01"
},
"wind": "南风3-4级",
"week": "星期一",
"date": "20140804"
},
{
"temperature": "28℃~36℃",
"weather": "晴转多云",
"weather_id": {
"fa": "00",
"fb": "01"
},
"wind": "东南风3-4级",
"week": "星期二",
"date": "20140805"
},
{
"temperature": "27℃~35℃",
"weather": "晴转多云",
"weather_id": {
"fa": "00",
"fb": "01"
},
"wind": "东南风3-4级",
"week": "星期三",
"date": "20140806"
},
{
"temperature": "27℃~34℃",
"weather": "多云",
"weather_id": {
"fa": "01",
"fb": "01"
},
"wind": "东南风3-4级",
"week": "星期四",
"date": "20140807"
},
{
"temperature": "27℃~33℃",
"weather": "多云",
"weather_id": {
"fa": "01",
"fb": "01"
},
"wind": "东北风4-5级",
"week": "星期五",
"date": "20140808"
},
{
"temperature": "26℃~33℃",
"weather": "多云",
"weather_id": {
"fa": "01",
"fb": "01"
},
"wind": "北风4-5级",
"week": "星期六",
"date": "20140809"
},
{
"temperature": "26℃~33℃",
"weather": "多云",
"weather_id": {
"fa": "01",
"fb": "01"
},
"wind": "北风4-5级",
"week": "星期日",
"date": "20140810"
}
]
},
"error_code": 0
}

解析其中的“future”数据,结果如下:

XML原始数据:

<?xml version="1.0" encoding="UTF-8" ?>
<channel>
<item>
<title>军报评徐才厚</title>
<description>人死账不消 反腐步不停,支持,威武,顶,有希望了。
</description>
<image>http://192.168.1.103:8080/img/a.jpg</image>
<type>1</type>
<comment>163</comment>
</item> <item>
<title>女司机翻车后直奔麻将室</title>
<description>女司机翻车后直奔麻将室,称大难不死手气必红
</description>
<image>http://192.168.1.103:8080/img/b.jpg</image>
<type>2</type>
</item> <item>
<title>小伙当“男公关”以为陪美女</title>
<description>来源:中国青年网,小伙当“男公关”以为陪美女,上工后被大妈吓怕 </description>
<image>http://192.168.1.103:8080/img/c.jpg</image>
<type>3</type>
</item> <item>
<title>男子看上女孩背影欲强奸</title>
<description> 来源:新京报, 看到正脸后放弃仍被捕
</description>
<image>http://192.168.1.103:8080/img/d.jpg</image>
<type>1</type>
<comment>763</comment>
</item>
</channel>

解析后的成果展示:

至此,基本完成JSON解析和XML解析。

2016-10-11   14:20:07

JSON解析和XML解析对比的更多相关文章

  1. QF——网络之JSON解析和XML解析

    JSON解析和XML解析: 用苹果原生的代理方式的网络请求后返回的都是二进制数据(NSData). 若是json,则通过NSJSONSerialization把NSData数据转换为JSON对象. N ...

  2. Cocos2d-x 3.0 Json用法 Cocos2d-x xml解析

    Cocos2d-x 3.0 加入了rapidjson库用于json解析.位于external/json下. rapidjson 项目地址:http://code.google.com/p/rapidj ...

  3. JSON解析和XML解析

    一. XML:用到一个开源解析类,GDataXMLNode(将其加入项目中),添加libxml2.dylib框架 经常用到的方法: 1.- (id)initWithXMLString:(NSStrin ...

  4. java中json解析,xml解析

    抓取网页内容,会返回json或者xml(html)格式的数据. 为了方便的对上述两种格式的数据进行解析,可采用解析工具. JsonPath https://github.com/jayway/Json ...

  5. UI进阶 解析XML 解析JSON

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

  6. 数据解析之XML和JSON

    1. 解析的基本的概念 解析:从事先规定好的格式中提取数据 解析前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JOSN解析 2. X ...

  7. 【.Net 】Json和Xml解析

    引言    Json和Xml是现在跨平台传输数据的主流格式,关于它们的解析,网上资料很多,我稍作整理,写成一个小demo,方便日后使用. JSON解析     能进行json解析的类库有很多,例如Ja ...

  8. 网络数据的XML解析

    网络应用中的数据解析,因为最近的应用,无论是Android的和ios平台的,一直用也是建议用的都是Json解析, xml解析都有点被遗忘了. 然后最近自己在做着玩一个ios的小应用,涉及网络数据的抓取 ...

  9. 大话XML解析

    之前我写过一篇关于xml解析的文章:http://blog.csdn.net/sdksdk0/article/details/50749326.今天这篇文章主要是进一步加深对xml基础的理解了使用,毕 ...

随机推荐

  1. jQuery控制tabs打开的数量

  2. Android之Socket通信、List加载更多、Spinner下拉列表

    Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务 ...

  3. 通过3个Hello World应用来了解ASP.NET 5应用是如何运行的(2)

    对于上面创建的这个Hello World应用来说,程序入口点由应用自身来提供,所以应用本身具有自我执行的能力.从应用托管(Host)的角度来讲,这样的应用同时负责对自身的托管.将应用与托管环境独立起来 ...

  4. [c++] Exceptions

    注意优先级关系,如下: try { throw logic_error{"blah"}; } catch (exception) { // caught here! // 有点if ...

  5. 微服务实战(二):使用API Gateway--转

    原文地址:http://dockone.io/article/482 [编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用的理想选 ...

  6. 附录A 编译安装Hadoop

    A.1  编译Hadoop A.1.1  搭建环境 第一步安装并设置maven 1.  下载maven安装包 建议安装3.0以上版本(由于Spark2.0编译要求Maven3.3.9及以上版本),本次 ...

  7. angular使用总结

    一.是否有必要加入模块化框架 1.Reqruiejs seajs的主要作用 (1)模块化,让代码易于维护. angular本身就是mvc,模块化很清晰,所以这点用不到requirejs (2)可以按需 ...

  8. 测试为什么Low

    你从来没有因为一个歌手不会写曲填词而说歌手很Low! 你从来没有因为一个演员不会摄影.唱歌而说演员很Low! 你从来没有因为一个记者不会摄影,拍照而说记者很Low! 你从来没有因为一个美食家不会烧菜, ...

  9. AWS CLI使用s3

    aws CLI是什么东西,暂且先不去了解,目前的需求是s3. 我在Jenkins上创建一个bucket,然后申请access_key,然后就可以使用s3来存储数据了.也就是说,s3就是一个网盘. 1. ...

  10. CQRS, Task Based UIs, Event Sourcing agh!

    原文地址:CQRS, Task Based UIs, Event Sourcing agh! Many people have been getting confused over what CQRS ...