JSON 到 Objective-C 中的模型映射

Posted

技术标签:

【中文标题】JSON 到 Objective-C 中的模型映射【英文标题】:JSON To Model Mapping in Objective-C 【发布时间】:2018-04-08 22:10:43 【问题描述】:

我正在尝试将收到的 JSON 映射到 Objective-C 中的模型对象。之前我在快速编码时总是使用 ObjectMapper。当我使用 ObjectMapper 时,我似乎无法掌握实现相同结果所需的步骤。问题是当使用 ObjectMapper 时,您编写的代码是在模型类内部发生映射的,例如;

例如:

public struct Item: Mappable

public var name: String?
public var id: Int?
public var description: String?

public init?(map: Map) 



init()



public mutating func mapping(map: Map) 

    name <- map["name"]
    id <- map["id"]
    description <- map["description"]

 

我知道我必须编写某种底层辅助类来实现相同的功能,但我似乎无法管理,因为我根本不理解这个概念。我找不到,或者即使我找到了,我也不知道该怎么做。请帮忙。

我猜我的模型类在 Objective-c 中应该是这样的:

@interface BBKProductMetaData : NSObject

@property (nonatomic, strong,nonnull, readonly) NSString *name;
@property (nonatomic, strong,nonnull, readonly) NSInteger *id;
@property (nonatomic, assign,nonnull, readonly) NSString *description;

@end

我应该怎么做才能将我的 JSON 响应映射到这个模型。

【问题讨论】:

实际上在 swift 中有类似 ObjectMapper 的库。在 CocoaPods 上搜索。示例:github.com/LoganWright/JSONMapping 有一个很棒的库github.com/Mantle/Mantle 这将是一个框架,所以我有义务不使用库。我不希望我的框架依赖于外部库。 -(id)initWithJSONDict:(NSDictionary *)dict self = [super init]; if (self)_name = dict[@"name"]; _id = [dict[@"id"] integerValue];, _metaDescription = dict[@"description"];return self; 是您要找的吗?或者你是想自己重做 ObjectMapper 库吗?另外,我会避免 NSString *description; 这可能会与 NSObject 的 -description 产生问题。 【参考方案1】:

Objective-c 没有 Swift 进步太多。所以你必须记住一些事情,比如

如果您正在创建模型,这意味着它必须可供其他类访问,因此您必须编写所有要访问其他类的属性和其他声明内容应该在 .h 文件不在 .m 文件中 在objective-c 中,您必须将所有模型类导入到您想要访问的标题中。

【讨论】:

以上是关于JSON 到 Objective-C 中的模型映射的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSON 映射到 java 模型类

RestKit:JSON 映射不起作用 Objective-c

Mantle - 映射嵌套数据结构

Json在objective-c中解析nil字段

将 JSON 映射到我的模型数组 - ObjectMapper

在这种情况下,如何将这个 json 映射到模型?