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