OC對JSON解析和實例一則


JSON解析

什么是JSON
JSON是一種輕量級的數據格式,一般用於數據交互
服務器返回給客戶端的數據,一般都是JSON格式或者XML格式(文件下載除外)

JSON的格式很像OC中的字典和數組

{"name" : "jack", "age" : 10}
{"names" : ["jack", "rose", "jim"]}

標准JSON格式的注意點:key必須用雙引號

要想從JSON中挖掘出具體數據,得對JSON進行解析
JSON 轉換為 OC數據類型

JSON – OC 轉換對照表

JSON OC
大括號 { } NSDictionary
中括號 [ ] NSArray
雙引號 ” “ NSString
數字 10、10.8 NSNumber

JSON解析方案

在iOS中,JSON的常見解析方案有4種
第三方框架:JSONKit、SBJson、TouchJSON(性能從左到右,越差)
蘋果原生(自帶):NSJSONSerialization(性能最好)

NSJSONSerialization的常見方法 //JSON數據 到 OC對象 + (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error; //OC對象 到 JSON數據 + (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error; 

解析來自服務器的JSON

這里寫圖片描述

 

 

實例:解析一個BOOK.JSON

=================================================================

項目文件結構:

=============================================================================

 

//  BOOK.h

 

#import <Foundation/Foundation.h>

 

@interface BOOK : NSObject

 //創建相應的成員屬性,封裝對象

@property (copy) NSString * Id;

@property (copy) NSString * language;

@property (copy) NSString * name;

@property double price;

@property (copy) NSString * summary;

@property (copy) NSString * auther_name;

 

@end

 ==============================================================================

 

//  BOOK.m

 

#import "BOOK.h"

 

@implementation BOOK

 

@end

 ===============================================================================

 

//  Book_manager.h

 

#import <Foundation/Foundation.h>

#import "BOOK.h"

//下面這句話的作用是去除Nslog方法前面的調試信息,使輸出結果更直觀

#define NSLog(FORMAT, ...) \

printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__]UTF8String]);

 

@interface Book_manager : NSObject

 

@property (nonatomic) NSMutableArray * dict;

 //封裝一個書本管理類

- (id)init; //初始化方法

- (void)addBOOK:(BOOK *)book; //增加書本方法

- (void)showAllBook; //顯示所有書本方法

 

@end

 ==============================================================================

 

//  Book_manager.m

 

#import "Book_manager.h"

 

@implementation Book_manager

 

- (id)init

{

    if(self = [super init]){

        _dict = [NSMutableArray new];

    }

    return self;

}

 

- (void)addBOOK:(BOOK *)book{

    [_dict addObject:book];

}

 

- (void)showAllBook

{

  //從詞典遍歷所有書本信息並輸出

    for (BOOK *bb in _dict) {

        NSLog(@"序列號:%@",[bb Id]);

        NSLog(@"書名:%@",bb.name);

        NSLog(@"語言:%@",bb.language);

        NSLog(@"作者:%@",bb.auther_name);

        NSLog(@"價格:%.2lf",bb.price);

        NSLog(@"簡介:%@",bb.summary);

        NSLog(@"============================================");

    }

}

 

@end

===============================================================================

 

//  main.m

 

#import <Foundation/Foundation.h>

#import "BOOK.h"

#import "Book_manager.h"

#define path @"/Users/qf/Desktop/Json文件/Book.json"

 

int main(int argc, const char * argv[]) {

    @autoreleasepool {

   //實例化一個書本管理類

        Book_manager *bm = [Book_manager new];

        //讀入文件

        NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

        //NSLog(@"%@",content);   //這句話可以用來測試是否讀取到數據

        //轉換成二進制數據

        NSData * data = [content dataUsingEncoding:NSUTF8StringEncoding];

        //解析JSON文件 OC中自帶的方法

        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

        //過濾節點,如果是{}就是詞典,如果是[]就是數組,層層過濾

        dict = [dict objectForKey:@"root"];

        dict = [dict objectForKey:@"books"];

        NSArray * arr = [dict objectForKey:@"book"];

        //遍歷數組並添加進書本管理

        for (NSDictionary * dd in arr) {

    //實例化一本書

            BOOK *book = [BOOK new];

            book.Id = [dd objectForKey:@"-id"];

            book.language = [dd objectForKey:@"-language"];

            book.name = [dd objectForKey:@"name"];

            book.price = [[dd objectForKey:@"price"] doubleValue];

            book.auther_name = [[dd objectForKey:@"auther"] objectForKey:@"name"];

            book.summary = [dd objectForKey:@"summary"];

    //添加書本進管理類中

            [bm addBOOK:book];

        }

 

        //顯示所有書本信息

        //[bm showAllBook];

 

   //下面這句語句是把所有書本按價格排序

        [bm.dict sortUsingComparator:^NSComparisonResult(BOOK *b1,BOOK *b2){

            return b2.price - b1.price;

        }];

        

        //NSLog(@"\n 排序之后:\n");

        [bm showAllBook];

        

    }

    return 0;

}

 

============================================

運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM