在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

 

希望对你有所帮助!

NSJSONSerialization-JSON数据与NSDictionary和NSArray之间的转化的更多相关文章

  1. json、xml和java对象之间的转化

    其实从面相对象的角度来理解这个问题,就会很清晰.java中的一切皆对象即把世间万物(Everything in the world)看做java对象,任何处理不了的问题都可以先转化成java对象在做处 ...

  2. python字典、字符串(json串)、字节串之间的转化

    字典和json字符串(本质也是字符串)之间的转化用json.dumps和json.loads() json.dumps():   字典→json字符串 json.loads():     json字符 ...

  3. NSDictionary或NSArray与JSON字符串相互转换

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

  4. iOS学习—JSON数据解析

      关于在iOS平台上进行JSON解析,已经有很多第三方的开源项目,比如TouchJson,JSONKit,SBJon等,自从iOS5.0以后,苹果SDK推出了自带的JSON解决方案NSJSONSer ...

  5. iOS学习——JSON数据解析(十一)

    在之前的<iOS学习——xml数据解析(九)>介绍了xml数据解析,这一篇简单介绍一下Json数据解析.JSON 即 JavaScript Object Natation,它是一种轻量级的 ...

  6. iOS学习笔记(十一)——JSON数据解析

    在之前的<iOS学习——xml数据解析(九)>介绍了xml数据解析,这一篇简单介绍一下Json数据解析.JSON 即 JavaScript Object Natation,它是一种轻量级的 ...

  7. 将字典或者数组转换成JSON数据或者字符串

    将字典或者数组转换成JSON数据或者字符串 源码: NSDictionary+JSON.h 与 NSDictionary+JSON.m // // NSDictionary+JSON.h // Cat ...

  8. iOS多线程与网络开发之解析json数据

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. // 同步发送信息 2 NSData *data = [NSURLConnection sendSynchronousRequest:request r ...

  9. Swift - 解析JSON数据(内置NSJSONSerialization与第三方JSONKit)

    一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SDK自带的JSON解决方案NSJSONSerialization,这是一个非常好用的JSON生成和解析工具,效率也比其 ...

随机推荐

  1. 分析WordPress主题结构是如何架构的?

    利用强大的技术,可以把基于WordPress的网站做成各种各样的形式,这除了要求WordPress主题开发人员精通HTML,PHP,JS,CSS等技术,还需要开发者掌握WordPress主题的框架.下 ...

  2. Tap.js

    Tap.js A lightweight ‘tap’ event JavaScript plugin

  3. java---金额中文大小写实时转换小程序

    本例演示一个String图形用户界面的完整应用程序,包括输入数据, 显示结果,响应事件以及异常处理. 输入一个实数表示金额,每次输入时显示该金额的中文大小写形式,运行窗口见最后. 在窗口中," ...

  4. java多线程编程(2)交替输出数字和字母

    mark一下,不停的看看notify和wait的没有理解 class Printer { int index=0; //输出奇数 public synchronized void printA(int ...

  5. openStack 性能开测

  6. SpringMVC ModelAndView方法与模板传参接收不到问题

    最近在使用Spring MVC做项目时,碰到一个问题,就是通过ModelAndView与前端模板页面通信时,一直无法在模板中显示出来传过去的参数值. 在网上也查了好久,就是不知道是啥问题,很是郁闷. ...

  7. Android中fragment_main.xml文件里的组件获取的问题

    package com.dhy.phonedial; import android.app.Activity; import android.app.Fragment; import android. ...

  8. Linux内核中SPI/I2c子系统剖析

    Linux内核中,SPI和I2C两个子系统的软件架构是一致的,且Linux内核的驱动模型都以bus,driver,device三种抽象对象为基本元素构建起来.下文的分析将主要用这三种抽象对象的创建过程 ...

  9. android中listview的一些样式设置

    在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备一张图片然后指定属性 android: ...

  10. 慢查询日志 与 general_log

            慢查询日志: 打开慢查询日志: set global slow_query_log=on; 输出格式定义:log_output: [file|table] FILE: set glob ...