NSJSONSerialization能够处理的JSONData

You use the NSJSONSerialization class to convert JSON to Foundation objects and convert Foundation objects to JSON.

你用NSJSONSerialization这个类来将JSON数据转换成Foundation对象或者将Foundation对象转换成JSON数据。

An object that may be converted to JSON must have the following properties:

一个能被转换成JSON数据的对象必须具备以下的特性:

  • The top level object is an NSArray or NSDictionary.
  • All objects are instances of NSString, NSNumber, NSArray, NSDictionary, or NSNull.
  • All dictionary keys are instances of NSString.
  • Numbers are not NaN or infinity.
  • 最顶层的对象必须是NSArray或者NSDictionary
  • 所有的实例对象必须是NSString、NSNumber、NSArray、NSDictionary或者NSNull
  • 所有字典中的键值必须是NSString
  • Numbers必须是有意义的(不能是无穷大)

提供测试使用的源码:

NSDictionary+JSON.h 与 NSDictionary+JSON.m

//
//  NSDictionary+JSON.h
//  Category
//
//  Created by YouXianMing on 14-8-28.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSDictionary (JSON)

// 转换成JSONString
- (NSString *)toJSONString;

// 转换成JSONData
- (NSData *)toJSONData;

@end
//
//  NSDictionary+JSON.m
//  Category
//
//  Created by YouXianMing on 14-8-28.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "NSDictionary+JSON.h"

@implementation NSDictionary (JSON)

- (NSString *)toJSONString
{
    NSData *data = [NSJSONSerialization dataWithJSONObject:self
                                                   options:NSJSONWritingPrettyPrinted
                                                     error:nil];

    if (data == nil)
    {
        return nil;
    }

    NSString *string = [[NSString alloc] initWithData:data
                                             encoding:NSUTF8StringEncoding];
    return string;
}

- (NSData *)toJSONData
{
    NSData *data = [NSJSONSerialization dataWithJSONObject:self
                                                   options:NSJSONWritingPrettyPrinted
                                                     error:nil];

    return data;
}

@end

NSData+JSON.h 与 NSData+JSON.m

//
//  NSData+JSON.h
//  Category
//
//  Created by YouXianMing on 14-8-28.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSData (JSON)

// 转换成集合
- (id)toPropertyList;

@end
//
//  NSData+JSON.m
//  Category
//
//  Created by YouXianMing on 14-8-28.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "NSData+JSON.h"

@implementation NSData (JSON)

- (id)toPropertyList
{
    return [NSJSONSerialization JSONObjectWithData:self
                                           options:NSJSONReadingMutableLeaves
                                             error:nil];
}

@end

使用时的源码:

//
//  ViewController.m
//  JSON
//
//  Created by YouXianMing on 14-10-8.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // 组织JSON数据
    NSDictionary *jsonDic =     @{
    @"name"          : @"YouXianMing",                             // NSString
    @"age"           : @26,                                        // NSNumber
    @"BWH"           : @[@1, @1, @1],                              // NSArray
    @"address"       : @{@"BeiJin": @"XXXX", @"XianNing":@"YYYY"}, // NSDictionary
    @"HasGirlFriend" : [NSNull null]                               // NSNull
    };

    // 转换成JSONData
    NSData *jsonData = [jsonDic toJSONData];

    // 将JSONData转换成list
    NSLog(@"%@", [jsonData toPropertyList]);
}

@end

以下是要点:

还有一点需要注意:

所有的数字相关的类型都会被转换成NSNumber,无论是布尔值还是浮点值还是整型值,都会被转换成NSNumber。

时间: 2024-08-07 08:24:09

NSJSONSerialization能够处理的JSONData的相关文章

iOS三方-MJRefresh的使用

MJRefresh是一款非常好用的上拉下拉第三方库,使用也很简单.github地址: https://github.com/CoderMJLee/MJRefresh . 下拉刷新 官方给过来的例子很简单,默认使用如下: self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ // 进入刷新状态后会自动调用这个block }]; 或 // 设置回调(一旦进入刷新状态,就调用target的action,也

iOS之解析

解析:从事先规定好的格式中提取数据 前提:提前约定好格式. XML解析 DOM :Document Object Model解析 原理: 一次性读入整个XML  以栈的方式解析每一个标签,开标签入栈 关标签出栈 当栈中没有任何元素的时候解析结束 优点:  一次解析出全部数据 而且有明显的层级关系 缺点:当XML太大的时候特别占内存 解决:将大的XML分成多个小的XML SAX:Simple API for XML 解析 基于事件驱动的解析方式,逐行解析数据(采用协议回调机制) 优势:逐行解析,不

iOS 自己封装的网络请求,json解析的类

基本上所有的APP都会涉及网络这块,不管是用AFNetWorking还是自己写的http请求,整个网络框架的搭建很重要. 楼主封装的网络请求类,包括自己写的http请求和AFNetWorking的请求,代码简单,主要是框架搭建.简单来说,就是一个请求类,一个解析类,还有若干数据类. 以下代码以公开的天气查询api为例: 1.网络请求类 我把常用的网络请求方法都封装好了,你只需要写自己的接口,传递apiName,params等参数就可以. #pragma mark ios请求方式 //ios自带的

IOS开发使用NSJSONSerialization、JSONKit、SBJson、TouchJson四种方式解析Json数据

概括:JSON数据解析可以使用苹果自带的NSJSONSerialization方式,也可以使用第三方框架,比如JSONKit.SBJson.TouchJSON等,框架的使用方式比较简单,但性能比ios原生方式差很多,建议使用原生方式. 1 NSJSONSerialization,IOS原生 /** *  解析JSON数据 */ -(void) analysisJSON{ // 获取URL NSURL *url = [[NSURL alloc] initWithString:@"http://lo

swift NSJSONSerialization json解析

以下是解析.生成方法 func jsonParse(){ /******************************************  解析json类型  **************************************/ let jsonFile = NSBundle.mainBundle().pathForResource("JsonParseFile", ofType: "geojson") let jsonData = NSData.

NSJSONSerialization的简单用法

NSJSONSerialization 苹果官方给出的解析方式是性能最优越的,虽然用起来稍显复杂. 首先我们在上面已经有了我希望得到的信息的网站的API给我们的URL,在OC中,我要加载一个NSURL对象,来向网站提交一个Request.到这里需要特别注意了,iOS9的时代已经来临,我们先前在旧版本中使用的某些类或者方法都已经被苹果官方弃用了.刚刚我们向网站提交了一个Request,在以往,我们是通过NSURLConnection中的sendSynchronousRequest方法来接受网站返回

NSJSONSerialization 转换JSON数据的 NSJSONReadingOptions的意思

[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingOptions error:&error]; NSJSONReadingOptions有三个枚举值,具体含义如下: 1.NSJSONReadingMutableContainers :Specifies that arrays and dictionaries are created as mutable objects. 指定方法创建的数组和字典是可变的对象.(意

NSJSONSerialization

简介: NSJSONSerialization 可以将 JSON 转换为 OC 对象或将 OC 对象转为 JSON 数据. 可以被转为 JSON 的对象具有以下属性: 1)对象为 NSArray 或 NSDictionary: 2)所有对象都是 NSString, NSNumber, NSArray, NSDictionary, or NSNull.的实例: 3)字典的键值必须为 NSString 类型: 4)Numbers不能是非数字或无穷大. 常用用法: 1.OC 对象 转为 JSON 类型

NSJSONSerialization(category)的一个扩展类

.h文件 // // NSJSONSerialization+Manage.h // SVPullToRefreshDemo // // Created by Fuer on 14-7-4. // Copyright (c) 2014年 Home. All rights reserved. // #import <Foundation/Foundation.h> /** * The domain for NSErrors generated by the NSJSONSerialization