zoukankan      html  css  js  c++  java
  • NSJSONSerialization-JSON数据与NSDictionary和NSArray之间的转化

     
     
    在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

     

    希望对你有所帮助!

  • 相关阅读:
    WSP部署错误—SharePoint管理框架中的对象“SPSolutionLanguagePack Name=0”依赖其他不存在的对象
    Elevate Permissions To Modify User Profile
    Error with Stsadm CommandObject reference not set to an instance of an object
    ASP.NET MVC3添加Controller时没有Scaffolding options
    测试使用Windows Live Writer写日志
    配置TFS 2010出现错误—SQL Server 登录的安全标识符(SID)与某个指定的域或工作组帐户冲突
    使用ADO.NET DbContext Generator出现错误—Unable to locate file
    CSS
    HTML DIV标签
    数据库
  • 原文地址:https://www.cnblogs.com/A--G/p/4958828.html
Copyright © 2011-2022 走看看