JSON(JavaScript Object Notation)在网络传输中几乎无处不在,JSON是一种轻量级的数据交换格式,是基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,数据格式容易阅读和编写,同时也非常便于机器解析和生成,在网络传输速度相对于传统的XML快。JSON的英文官网http://www.json.org/,具体的格式可看官网,如果你是在看不懂,可以参考本文之前在Android中解析JSON的文章,其中还有关于JSON和XML的对比(Android数据解析-JSON解析)。

JSON数据

一个最简单的JSON数据如下{"Name":"FlyElephant"},Name是键,FlyElephant是值,用{}包裹;开发的时候经常会遇到客户端与服务端打交道,数据传输基本上都是JSON格式,一般都是服务端提供接口数据,那么我开始的时候没有数据怎么办呢,自己单独搞一个JSON字符串自己解析也可以,不过没什么意思,不过还好国家气象局提供的有接口数据,网上有些早的文章写了多个接口,个人测试只有一个接口还是可以用的。http://m.weather.com.cn/data/101180601.html,这个链接老家的天气接口,如果你想知道你老家的天气接口,把html前面的数字编码替换即可,如果想看帝都的天气,链接地址如下:http://m.weather.com.cn/data/101010100.html,下面提供了一份全国的城市编码,方便大家测试:

直辖市
"北京","上海","天津","重庆"
"101010100","101020100","101030100","101040100" 特别行政区
"香港","澳门"
"101320101","101330101" 黑龙江
"哈尔滨","齐齐哈尔","牡丹江","大庆","伊春","双鸭山","鹤岗","鸡西","佳木斯","七台河","黑河","绥化","大兴安岭"
"101050101","101050201","101050301","101050901","101050801","101051301","101051201","101051101","101050401","101051002","101050601","101050501","101050701" 吉林
"长春","延吉","吉林","白山","白城","四平","松原","辽源","大安","通化"
"101060101","101060301","101060201","101060901","101060601","101060401","101060801","101060701","101060603","101060501" 辽宁
"沈阳","大连","葫芦岛","盘锦","本溪","抚顺","铁岭","辽阳","营口","阜新","朝阳","锦州","丹东","鞍山"
"101070101","101070201","101071401","101071301","101070501","101070401","101071101","101071001","101070801","101070901","101071201","101070701","101070601","101070301" 内蒙古
"呼和浩特","呼伦贝尔","锡林浩特","包头","赤峰","海拉尔","乌海","鄂尔多斯","通辽"
"101080101","101081000","101080901","101080201","101080601","101081001","101080301","101080701","101080501" 河北
"石家庄","唐山","张家口","廊坊","邢台","邯郸","沧州","衡水","承德","保定","秦皇岛"
"101090101","101090501","101090301","101090601","101090901","101091001","101090701","101090801","101090402","101090201","101091101" 河南
"郑州","开封","洛阳","平顶山","焦作","鹤壁","新乡","安阳","濮阳","许昌","漯河","三门峡","南阳","商丘","信阳","周口","驻马店"
"101180101","101180801","101180901","101180501","101181101","101181201","101180301","101180201","101181301","101180401","101181501","101181701","101180701","101181001","101180601","101181401","101181601" 山东
"济南","青岛","淄博","威海","曲阜","临沂","烟台","枣庄","聊城","济宁","菏泽","泰安","日照","东营","德州","滨州","莱芜","潍坊"
"101120101","101120201","101120301","101121301","101120710","101120901","101120501","101121401","101121701","101120701","101121001","101120801","101121501","101121201","101120401","101121101","101121601","101120601" 山西
"太原","阳泉","晋城","晋中","临汾","运城","长治","朔州","忻州","大同","吕梁"
"101100101","101100301","101100601","101100401","101100701","101100801","101100501","101100901","101101001","101100201","101101101" 江苏
"南京","苏州","昆山","南通","太仓","吴县","徐州","宜兴","镇江","淮安","常熟","盐城","泰州","无锡","连云港","扬州","常州","宿迁"
"101190101","101190401","101190404","101190501","101190408","101190406","101190801","101190203","101190301","101190901","101190402","101190701","101191201","101190201","101191001","101190601","101191101","101191301" 安徽
"合肥","巢湖","蚌埠","安庆","六安","滁州","马鞍山","阜阳","宣城","铜陵","淮北","芜湖","毫州","宿州","淮南","池州"
"101220101","101221601","101220201","101220601","101221501","101221101","101220501","101220801","101221401","101221301","101221201","101220301","101220901","101220701","101220401","101221701" 陕西
"西安","韩城","安康","汉中","宝鸡","咸阳","榆林","渭南","商洛","铜川","延安"
"101110101","101110510","101110701","101110801","101110901","101110200","101110401","101110501","101110601","101111001","101110300" 宁夏
"银川","固原","中卫","石嘴山","吴忠"
"101170101","101170401","101170501","101170201","101170301" 甘肃
"兰州","白银","庆阳","酒泉","天水","武威","张掖","甘南","临夏","平凉","定西","金昌"
"101160101","101161301","101160401","101160801","101160901","101160501","101160701","101050204","101161101","101160301","101160201","101160601" 青海
"西宁","海北","海西","黄南","果洛","玉树","海东","海南"
"101150101","101150801","101150701","101150301","101150501","101150601","101150201","101150401" 湖北
"武汉","宜昌","黄冈","恩施","荆州","神农架","十堰","咸宁","襄阳","孝感","随州","黄石","荆门","鄂州"
"101200101","101200901","101200501","101201001","101200801","101201201","101201101","101200701","101200201","101200401","101201301","101200601","101201401","101200301" 湖南
"长沙","邵阳","常德","郴州","吉首","株洲","娄底","湘潭","益阳","永州","岳阳","衡阳","怀化","韶山","张家界"
"101250101","101250901","101250601","101250501","101251501","101250301","101250801","101250201","101250701","101251401","101251001","101250401","101251201","101250202","101251101" 浙江
"杭州","湖州","金华","宁波","丽水","绍兴","衢州","嘉兴","台州","舟山","温州"
"101210101","101210201","101210901","101210401","101210801","101210501","101211001","101210301","101210601","101211101","101210701" 江西
"南昌","萍乡","九江","上饶","抚州","吉安","鹰潭","宜春","新余","景德镇","赣州"
"101240101","101240901","101240201","101240301","101240401","101240601","101241101","101240501","101241001","101240801","101240701" 福建
"福州","厦门","龙岩","南平","宁德","莆田","泉州","三明","漳州"
"101230101","101230201","101230701","101230901","101230301","101230401","101230501","101230801","101230601" 贵州
"贵阳","安顺","赤水","遵义","铜仁","六盘水","毕节","凯里","都匀"
"101260101","101260301","101260208","101260201","101260601","101260801","101260701","101260501","101260401" 四川
"成都","泸州","内江","凉山","阿坝","巴中","广元","乐山","绵阳","德阳","攀枝花","雅安","宜宾","自贡","甘孜州","达州","资阳","广安","遂宁","眉山","南充"
"101270101","101271001","101271201","101271601","101271901","101270901","101272101","101271401","101270401","101272001","101270201","101271701","101271101","101270301","101271801","101270601","101271301","101270801","101270701","101271501","101270501" 广东
"广州","深圳","潮州","韶关","湛江","惠州","清远","东莞","江门","茂名","肇庆","汕尾","河源","揭阳","梅州","中山","德庆","阳江","云浮","珠海","汕头","佛山"
"101280101","101280601","101281501","101280201","101281001","101280301","101281301","101281601","101281101","101282001","101280901","101282101","101281201","101281901","101280401","101281701","101280905","101281801","101281401","101280701","101280501","101280800" 广西
"南宁","桂林","阳朔","柳州","梧州","玉林","桂平","贺州","钦州","贵港","防城港","百色","北海","河池","来宾","崇左"
"101300101","101300501","101300510","101300301","101300601","101300901","101300802","101300701","101301101","101300801","101301401","101301001","101301301","101301201","101300401","101300201" 云南
"昆明","保山","楚雄","德宏","红河","临沧","怒江","曲靖","思茅","文山","玉溪","昭通","丽江","大理"
"101290101","101290501","101290801","101291501","101290301","101291101","101291201","101290401","101290901","101290601","101290701","101291001","101291401","101290201" 海南
"海口","三亚","儋州","琼山","通什","文昌"
"101310101","101310201","101310205","101310102","101310222","101310212" 新疆
"乌鲁木齐","阿勒泰","阿克苏","昌吉","哈密","和田","喀什","克拉玛依","石河子","塔城","库尔勒","吐鲁番","伊宁"
"101130101","101131401","101130801","101130401","101131201","101131301","101130901","101130201","101130301","101131101","101130601","101130501","101131001" 西藏
"拉萨","阿里","昌都","那曲","日喀则","山南","林芝"
"101140101","101140701","101140501","101140601","101140201","101140301","101140401" 台湾
"台北","高雄"
"101340102","101340201"

天气返回的数据就是JSON格式,不需要自己提供数据,图片如下:

  

JSON解析

解析JSON一般有四种方式TouchJson、 SBJson 、JSONKit 和NSJSONSerialization,性能和速度的NSJSONSerialization>JSONKit>SBJSON>TouchJson,NSJSONSerialization是iOS5之后系统提供的,其他的为第三方类库,现在手机基本上都是iOS6以上,本文就从系统自带的NSJSONSerialization来解析JSON数据。

NSJSONSerialization有两个方法:

dataWithJSONObject:从OC对象转换成JSON数据

JSONObjectWithData:从JSON转成OC对象

/* Generate JSON data from a Foundation object. If the object will not produce valid JSON then an exception will be thrown. Setting the NSJSONWritingPrettyPrinted option will generate JSON with whitespace designed to make the output more readable. If that option is not set, the most compact possible JSON will be generated. If an error occurs, the error parameter will be set and the return value will be nil. The resulting data is a encoded in UTF-8.
*/
+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error; /* Create a Foundation object from JSON data. Set the NSJSONReadingAllowFragments option if the parser should allow top-level objects that are not an NSArray or NSDictionary. Setting the NSJSONReadingMutableContainers option will make the parser generate mutable NSArrays and NSDictionaries. Setting the NSJSONReadingMutableLeaves option will make the parser generate mutable NSString objects. If an error occurs during the parse, then the error parameter will be set and the result will be nil.
The data must be in one of the 5 supported encodings listed in the JSON specification: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE. The data may or may not have a BOM. The most efficient encoding to use for parsing is UTF-8, so if you have a choice in encoding the data passed to this method, use UTF-8.
*/
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;

故事板中放置一个UITextView:

@property (weak, nonatomic) IBOutlet UITextView *myTextView;

viewDidLoad中代码: 

    //设置URL
NSURL *url=[NSURL URLWithString:@"http://m.weather.com.cn/data/101180601.html"];
//设置请求
NSURLRequest *request=[NSURLRequest requestWithURL:url];
//接收数据
NSData *responseData=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
//解析数据
NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:nil];
//展示结果
NSDictionary *weatherResult= [weatherDic objectForKey:@"weatherinfo"];
self.myTextView.text= [NSString stringWithFormat:@"今天是 %@ %@ %@ 的天气状况:温度%@ %@ %@---FlyElephant:http://www.cnblogs.com/xiaofeixiang",[weatherResult objectForKey:@"date_y"],[weatherResult objectForKey:@"week"],[weatherResult objectForKey:@"city"], [weatherResult objectForKey:@"temp1"],[weatherResult objectForKey:@"weather1"],[weatherResult objectForKey:@"index_ls"]];

跟之前的网络请求一样,代码中有解析,如果不明白可以参考之前文章,最终演示效果如下:

iOS开发-JSON解析的更多相关文章

  1. iOS开发 XML解析和下拉刷新,上拉加载更多

    iOS开发 XML解析和下拉刷新,上拉加载更多 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示 ...

  2. 玩转iOS开发 - JSON 和 Xml 数据解析

    前言 Json 和xml是网络开发中经常使用的数据格式,JSON轻量级.xml相对较复杂.所以如今用JSON的比例很大.基本上从server获取的返回数据都是JSON格式的,作为iOS开发人员,解析J ...

  3. iOS开发-简单解析JSON数据

    什么是JSON   JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组   {“nam ...

  4. IOS中Json解析的四种方法

    作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验 ...

  5. iOS开发--JSON

    1.什么是JSON? JSON(JavaScript Object Notation)在网络传输中几乎无处不在,JSON是一种轻量级的数据交换格式,是基于JavaScript(Standard ECM ...

  6. iOS开源JSON解析库MJExtension

    iOS中JSON与NSObject互转有两种方式:1.iOS自带类NSJSONSerialization 2.第三方开源库SBJSON.JSONKit.MJExtension.项目中一直用MJExte ...

  7. 【转】IOS中Json解析的四种方法

    原文网址:http://blog.csdn.net/enuola/article/details/7903632 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有 ...

  8. iOS中JSON解析三方库的比较

    网络数据解析框架 1.  JsonModel 一个 JSON 模型转换库,有着比较简洁的接口.Model 需要继承自 JSONModel. 2.  yyModel yyModel比较轻量(算上.h 只 ...

  9. iOS开发JSON字符串和字典互转

    1.相关属性简述 NSJSONReadingOptions读取属性: typedef NS_OPTIONS(NSUInteger, NSJSONReadingOptions) { NSJSONRead ...

随机推荐

  1. ASL测试 课题测试博客

    已知线性表具有元素{5,13,19,21,37,56,64,75,80,88,92},如果使用折半查找法,ASL是多少? 知识点1: 折半查找法:折半查找,又称作二分查找.这个查找的算法的特点,要求数 ...

  2. 大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础

    第五章 函数式编程-基础5.1 函数式编程内容说明5.1.1 函数式编程内容5.1.2 函数式编程授课顺序5.2 函数式编程介绍5.2.1 几个概念的说明5.2.2 方法.函数.函数式编程和面向对象编 ...

  3. JPA实体类中的注解

    @Entity 标注于实体类上,通常和@Table是结合使用的,代表是该类是实体类@Table 标注于实体类上,表示该类映射到数据库中的表,没有指定名称的话就表示与数据库中表名为该类的简单类名的表名相 ...

  4. ThinkPHP连接sqlserver,错误11001

    错误代码如下: :( 11001:[Microsoft][ODBC Driver 11 for SQL Server]TCP Provider: 不知道这样的主机. 0:[Microsoft][ODB ...

  5. [POI2000]病毒 --- AC自动机

    [POI2000]病毒 题目描述: 二进制病毒审查委员会最近发现了如下的规律: 某些确定的二进制串是病毒的代码. 如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的. 现在委员会已经找 ...

  6. Windows安装绿色版git管理软件GitStack 2.3.8

    1.原来 GitStack  是安装在局域网的,为了更好开展工作,迁移到公网的服务器.(安全性未知) 2.公网服务器已经在运行一个 Apache 2.4 (占用80端口): 3.GitStack 2. ...

  7. 【洛谷】4317:花神的数论题【数位DP】

    P4317 花神的数论题 题目背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 题目描述 话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我 ...

  8. Sql server 存储过程基础语法

    一.定义变量 --简单赋值 declare @a int print @a --使用select语句赋值 declare @user1 nvarchar() select @user1='张三' pr ...

  9. UVA 11947 Cancer or Scorpio 水题

    Cancer or Scorpio Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://uva.onlinejudge.org/index.php? ...

  10. POJ 1654 Area 计算几何

    #include<stdio.h> #include<string.h> #include<iostream> #include<math.h> usi ...