miyagi 0.0.3

miyagi 0.0.3

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
发布最后发布2014年12月

未声明的 维护。



miyagi 0.0.3

  • 作者
  • @thingsdoer

禅意 JSON <-> 对象序列化

JSON,JSOFF!

安装

通过 cocoapods : pod miyagi

概述

miyagi 允许您以类似于 jackson-annotations 的方式指定 JSON 映射。让您无需在应用程序的任何地方编写 JSON 映射代码。一个经过 miyagi 处理的类可能看起来像这样

JSON(MyClass)
    j(myJsonKey, name)
    j(myJsonKey2, boolean)
JSOFF(MyClass)

@interface Basic : NSObject <JSON>

@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSNumber *boolean;

@end

您只需将 JSON/JSOFF 语法放置在文件顶部,为要映射的每个属性使用 j(key,property) 映射,然后采用 <JSON> 协议。之后,您可以通过调用 initWithDictionary: 从 JSON 字典(由 JSON 解析器返回)中创建一个实例,并通过调用 JSON 将对象反序列化为 JSON 字典。

为什么选择 miyagi

我对几乎每一个序列化实现都不满意,几乎所有的都是 almost 完成,但都没有完全跨过边界,成为真正好用的解决方案,所有这些都有局限,这就是为什么我认为 miyagi 很酷。

  • 无需编写初始化代码。
  • JSON 规范与属性一起在头文件中可见。
  • @properties 不需要与 JSON 键相匹配。
  • 无需子类化任何内容。
  • 轻量级实现(2 个文件,<500 行)。

用法

  • 指定

在头文件中定义您的 JSON 映射,在接口上方,如下所示

JSON(MyClass)
    j(myJsonKey, name)
    j(myJsonKey2, boolean)
JSOFF(MyClass)

您的属性将隐式映射到键。您可以像平常一样重写属性名称,并且 miyagi 注入将在代码执行之前进行。无需调用 super!(所以变量已经在重写的方法中注入)

  • 从 JSON
MyObject *object = [[MyObject alloc] initWithDictionary:jsonDictionary];

调用 initWithDictionary: 后,您的对象将被映射。您可以在类中实现此方法,无需调用 super,并且注入将在代码执行之前进行。

  • 转换为 JSON
NSDictionary *json = [object JSON];

您可以通过调用 JSON 从对象生成一个 NSDictionary,反向使用映射进行映射。您可以在类中实现此方法,无需调用 super,并且注入将在代码执行之前进行。返回的 NSDictionary 将与 miyagiNSDictionary 合并,如果发生冲突,则您的键将覆盖 miyagi 的键。

示例

-(NSDictionary*)JSON{
    return @{@"myKey": @"myValue"};
    // your returned dictionary will be merged into the JSON dictionary.
}

支持类型

miyagi 支持以下类型

JSON Objective-C
null NSNull
truefalse NSNumber
Number NSNumber
String NSString
Array NSArray
对象 NSDictionary

集合

miyagi 支持使用“伪造协议”进行集合序列化,这与 JSONModel 相同,本质上为您提供与其他语言(如 Java)中类型化集合相似的语法。

它看起来是这样的

@property(nonatomic,strong)NSArray<MyClass>      *array;
@property(nonatomic,strong)NSDictionary<MyClass> *map;

立即 //TODO

  • 更多边缘情况覆盖!
  • 更多测试!

我如何帮助?

编写测试!即使它们不通过,我也会查看有效的 JSON 规范测试并使它们工作。 :)

感谢

感谢 Mobile Travel Technologies Ltd. 允许我在工作时间开发一些内容。