你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發-JSON解析

iOS開發-JSON解析

編輯:IOS開發綜合
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對象   1   /* 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:   1 @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",
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved