禅意 JSON <-> 对象序列化
通过 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
很酷。
@properties
不需要与 JSON 键相匹配。在头文件中定义您的 JSON 映射,在接口上方,如下所示
JSON(MyClass)
j(myJsonKey, name)
j(myJsonKey2, boolean)
JSOFF(MyClass)
您的属性将隐式映射到键。您可以像平常一样重写属性名称,并且 miyagi
注入将在代码执行之前进行。无需调用 super
!(所以变量已经在重写的方法中注入)
MyObject *object = [[MyObject alloc] initWithDictionary:jsonDictionary];
调用 initWithDictionary:
后,您的对象将被映射。您可以在类中实现此方法,无需调用 super
,并且注入将在代码执行之前进行。
NSDictionary *json = [object JSON];
您可以通过调用 JSON
从对象生成一个 NSDictionary
,反向使用映射进行映射。您可以在类中实现此方法,无需调用 super
,并且注入将在代码执行之前进行。返回的 NSDictionary
将与 miyagi
的 NSDictionary
合并,如果发生冲突,则您的键将覆盖 miyagi
的键。
示例
-(NSDictionary*)JSON{
return @{@"myKey": @"myValue"};
// your returned dictionary will be merged into the JSON dictionary.
}
miyagi
支持以下类型
JSON | Objective-C |
---|---|
null |
NSNull |
true 和 false |
NSNumber |
Number | NSNumber |
String | NSString |
Array | NSArray |
对象 | NSDictionary |
miyagi
支持使用“伪造协议”进行集合序列化,这与 JSONModel 相同,本质上为您提供与其他语言(如 Java)中类型化集合相似的语法。
它看起来是这样的
@property(nonatomic,strong)NSArray<MyClass> *array;
@property(nonatomic,strong)NSDictionary<MyClass> *map;
编写测试!即使它们不通过,我也会查看有效的 JSON 规范测试并使它们工作。 :)
感谢 Mobile Travel Technologies Ltd. 允许我在工作时间开发一些内容。