zoukankan      html  css  js  c++  java
  • NSDictionary或NSArray与JSON字符串相互转换

    在iOS 5 中,苹果引入了一个解析JSON串的NSJSONSerialization类。
    通过该类,我们可以完成JSON数据与NSDictionary和NSArray之间的转化。

    以前,我记得我用的是第三方的插件。但是,苹果出了这套解析后,效率也大大了超过了,所有的解析第三方类库。所以,推荐使用NSJSONSerialization类来完成转化。

    一、将NSDictionary或NSArray转化为JSON串

    // 将字典或者数组转化为JSON串
    - (NSData *)toJSONData:(id)theData{
    
        NSError *error = nil;
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:theData
                                                           options:NSJSONWritingPrettyPrinted
                                                             error:&error];
    
        if ([jsonData length] > 0 && error == nil){
            return jsonData;
        }else{
            return nil;
        }
    }

    使用这个方法的返回,我们就可以得到想要的JSON串

    NSString *jsonString = [[NSString alloc] initWithData:jsonData
                                                     encoding:NSUTF8StringEncoding];

    二、将JSON串转化为NSDictionary或NSArray

    将NSString转化为NSData

    [jsonString dataUsingEncoding:NSASCIIStringEncoding];
    // 将JSON串转化为字典或者数组
    - (id)toArrayOrNSDictionary:(NSData *)jsonData{
        NSError *error = nil;
        id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData
                                                        options:NSJSONReadingAllowFragments
                                                          error:&error];
    
        if (jsonObject != nil && error == nil){
            return jsonObject;
        }else{
            // 解析错误
             return nil;
        }
    
    }

    三、将JSON串与NSArray和NSDictionary的操作进行封装

    当然,也有很多时候,我们将这些操作,分别定义在NSObject和NSString的一个分类中

    直接贴:

    1.将NSString转化为NSArray或者NSDictionary

    #import "NSString+JSONCategories.h"
    
    @implementation NSString(JSONCategories)
    
    -(id)JSONValue;
    {
        NSData* data = [self dataUsingEncoding:NSUTF8StringEncoding];
        __autoreleasing NSError* error = nil;
        id result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
        if (error != nil) return nil;
        return result;
    }
    @end

    2.将NSArray或者NSDictionary转化为NSString

    #import "NSObject+JSONCategories.h"
    
    @implementation NSObject (JSONCategories)
    
    -(NSData*)JSONString;
    {
        NSError* error = nil;
        id result = [NSJSONSerialization dataWithJSONObject:self
                                                    options:kNilOptions error:&error];
        if (error != nil) return nil;
        return result;
    }
    @end
  • 相关阅读:
    IOS总结_无需自己定义UITabbar也可改变UITabbarController的背景和点击和的颜色
    破解中国电信华为无线猫路由(HG522-C)自己主动拨号+不限电脑数+iTV
    HDUJ 2074 叠筐 模拟
    CSRF——攻击与防御
    Ant命令行操作
    C#软件开发实例.私人订制自己的屏幕截图工具(七)加入放大镜的功能
    qemu-kvm-1.1.0源代码中关于迁移的代码分析
    FileSystemWatcher使用方法具体解释
    configure交叉编译
    海量图片存储策略
  • 原文地址:https://www.cnblogs.com/yjg2014/p/3803789.html
Copyright © 2011-2022 走看看