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

     

    希望对你有所帮助!

  • 相关阅读:
    如何锻炼出最牛程序员的编码套路
    如果仔细观察他们,你会发现他们时时都在锻炼
    单纯地每天埋头于工作并不能算是真正意义上的锻炼
    把全世界的人们都联系在一起,提升人们的社交参与度
    HTML5十五大新特性
    html5的八大特性
    【贪心】【二维偏序】【权值分块】bzoj1691 [Usaco2007 Dec]挑剔的美食家
    【分块】【链表】bzoj2738 矩阵乘法
    【分块】bzoj3343 教主的魔法
    【线段树】bzoj3747 [POI2015]Kinoman
  • 原文地址:https://www.cnblogs.com/A--G/p/4958828.html
Copyright © 2011-2022 走看看