TouchJSON 1.1

TouchJSON 1.1

测试已测试
语言语言 Obj-CObjective C
许可协议 BSD
发布最后发布2014年12月

未声明 维护。



  • Jonathan Wight

TouchJSON 如何使用

重要

TouchJSON 已被弃用。不要期待更多改进、错误修正或合并的拉取请求。

iOS 和 OS X 自 5.0 和 10.7 版本起已有原生的 JSON 支持——截至目前这两个操作系统版本已发布。您应该使用操作系统的 JSON 支持 (NSJSONSerialization),而不要使用任何第三方 JSON 库。操作系统的原生 JSON 类别对于可以在 iOS 5/OSX 10.7 及以上版本上运行的多数人来说已经足够好了。

本仓库不会很快消失。但是您不应该在新项目中使用这段代码。

感谢您提供的所有错误报告、功能创意、一般支持和啤酒。

Jon. (@schwa)

简介

TouchJSON 是一个基于 Objective-C 的用于 JSON 编码数据的解析器和生成器。TouchJSON 可编译为适用于 Mac OS X 和 iOS 设备(目前为 iPhone、iPad 和 iPod Touch)。

它基于 Jonathan Wight 的 CocoaJSON 代码:http://toxicsoftware.com/cocoajson/

TouchJSON 是 TouchCode 开源软件系列的一部分。

许可协议

代码基于 2-clause BSD 许可协议(“简化 BSD 许可协议”或“FreeBSD 许可协议”)。许可协议内容如下

版权 2011 Jonathan Wight。保留所有权利。

在满足以下条件的情况下,允许以源代码和二进制形式重新分发和使用,无论是否进行了修改:

  1. 源代码重新分发必须保留上述版权声明、本条件列表和以下免责声明。

  2. 二进制形式的重新分发必须在使用上述版权声明、本条件列表和以下免责声明的文档或其他材料中重新生产。

本软件由 JONATHAN WIGHT 提供“按原样”以及任何明示或暗示的保证,包括但不限于适销性和适用于特定目的的暗示保证均予以排除。在任何情况下,JONATHAN WIGHT 或贡献者均不对任何直接、间接、偶然、特殊、示范性或连锁性的损害赔偿(包括但不限于替代商品或服务的采购、使用、数据损失或盈利损失;业务中断)承担责任,这些损害赔偿无论因何种原因产生,均基于对可能发生此类损害赔偿的知情或不知情,是否基于合同、严格责任或侵权(包括过失或不作为)而产生,即使告知了软件可能产生此类损害赔偿的风险。

软件和文档中的观点和结论是作者的观点,不应被视为反映乔纳森·怀特的官方政策,无论是明示的还是默示的。

自动引用计数(ARC)

TouchJSON的“master”分支不使用自动引用计数(ARC)。

有一个分支使用了ARC,位于“features/ARC”。

大部分新开发都在ARC分支上。在某个时刻,非ARC分支将进入维护模式,ARC分支将变成主分支。

主页

touchcode的主要源代码库位于GitHub的http://github.com/TouchCode/TouchJSON

作者

主要作者是乔纳森·怀特http://toxicsoftware.com/,其他一些人为修复缺陷、修补包和文档做出了贡献。(注意:如果你为TouchJSON做出了贡献并希望在这里列出,请通知乔纳森·怀特)。

什么是JSON?

支持

有一个相对低流量的邮件列表托管在Google Groups上:http://groups.google.com/group/touchcode-dev

错误报告

在GitHub问题跟踪器 http://github.com/TouchCode/TouchJSON/issues 上报告错误,但请确保您的JSON数据是有效的(在提交错误之前,请查看http://www.jsonlint.com/ (当然,如果您在处理无效JSON时发现TouchJSON崩溃,请随意提交错误或与邮件列表讨论))。

如何帮助

您可以通过多种方式帮助TouchJSON

  • 找出错误并提交问题
  • 修复错误
  • 提交功能请求(我们非常希望看到更多的TouchJSON功能请求)
  • 编写更多的单元测试
  • 帮助改进文档
  • 帮助对TouchJSON进行性能分析和优化,以便提高速度和内存使用效率

如何在使用Cocoa或Cocoa Touch应用程序中使用TouchJSON。

TouchJSON的使用非常简单。通常,您只需要一行代码即可将JSON数据转换为Cocoa表示形式,或从Cocoa表示形式转换为JSON数据。

依赖关系

没有依赖项!TouchJSON可以在Mac OS X上编译(请注意,它使用ObjC-2)和iOS。它应该可以编译至今为止的所有iOS版本。

请注意,示例、单元测试和基准测试项目在Mac OS X上运行。

设置您的项目

将TouchJSON/Source中的源文件复制到您的项目中。最简单的方法是同时在Xcode中打开两个项目,然后拖放。请确保选中“需要时将项目复制到目标组文件夹。”

请注意,源代码中的“Experimental”子目录中的代码只是实验性的,可能没有经过充分的测试,并且可能具有额外的依赖关系。

将 JSON 转换为对象

基本用法

将 "#import "CJSONDeserializer.h"" 添加到您的源文件中。

NSData *theJSONData = /* some JSON data */
NSError *theError = nil;
id theObject = [[CJSONDeserializer deserializer] deserialize:theJSONData error:&theError];}

这将把包含 JSON 的 NSData 对象转换为对象。结果对象的类取决于所涉及的 JSON 数据类型。如果对象为 NULL,则反序列化失败,您应该检查错误参数。

以下稍微复杂的示例展示了如何将包含 JSON 字典的 NSString 转换为 NSDictionary

NSString *jsonString = @"yourJSONHere";
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *error = nil;
NSDictionary *dictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error];

如果 JSON 根对象不是一个字典,这种反序列化将失败。请再次检查错误。

使用 NSDictionary 分类

在源文件中添加 "#include "NSDictionary_JSONExtensions.h""。

NSString *theJSONString = @"{\"key\":\"value\"}";
NSError *theError = NULL;
NSDictionary *theDictionary = [NSDictionary dictionaryWithJSONString:theJSONString error:&theError];

此版本的代码可能比上述前几个例子更方便。

避免输出中的 NSNull 值

如果您的输入 JSON 数据包含 null 值,则默认情况下,这些值将以 NSNull 在您的输出 ObjC 对象中表示。以下示例展示了如何避免输出中的 NSNull 值

NSData *theJSONData = /* some JSON data */
CJSONDeserializer *theDeserializer = [CJSONDeserializer deserializer];
theDeserializer.nullObject = NULL;
NSError *theError = nil;
id theObject = [theDeserializer deserialize:theJSONData error:&theError];}

将对象转换为 JSON

将 "#import "CJSONDataSerializer.h"" 添加到您的文件中。

以下是一个代码示例

NSDictionary *dictionary = [NSDictionary dictionaryWithObject:@"b" forKey:@"a"];
NSError *error = NULL;
NSData *jsonData = [[CJSONSerializer serializer] serializeObject:dictionary error:&error];

无效的 JSON

如果您认为您的 JSON 是有效的,但是 TouchJSON 无法正确处理它(或者您认为 TouchJSON 生成了无效的 JSON),请使用在线 JSON lint 工具来验证您的 JSON:[http://www.jsonlint.com/](http://www.jsonlint.com/)

在提交错误之前验证您的 JSON 特别重要。

字符串编码

TouchJSON 可以与 Foundation 框架支持的所有字符串编码的 JSON 一起工作。然而,在内部 TouchJSON 偏好于 UTF8,所以为了性能考虑,您应该尽可能使用 UTF8。

日期格式

JSON 没有指定日期编码格式。因此,使用了各种方法。TouchJSON 不会指定您要使用哪种格式。推荐使用 ISO 8601 样式的日期(按需尽可能高精度)。请参阅 [http://en.wikipedia.org/wiki/ISO_8601](http://en.wikipedia.org/wiki/ISO_8601)。您可以使用 CFilteringJSONSerializer 类自动将 Cocoa 的 NSDate 对象序列化为 ISO-8601 字符串