RESTKit 对象 BOOL 属性为真/假 JSON
Posted
技术标签:
【中文标题】RESTKit 对象 BOOL 属性为真/假 JSON【英文标题】:RESTKit object BOOL property to true/false JSON 【发布时间】:2013-07-26 06:04:38 【问题描述】:我有一些对象作为 JSON 发送到服务器,在请求正文中,用于 POST 请求。我的问题与布尔属性有关。
假设我在以 JSON 形式发送的对象中有此属性:
@property (nonatomic) BOOL exported;
默认情况下,RestKit 将布尔值以 JSON 格式的 1
或 0
发送。如何设置 RestKit 以便所有 BOOL 都以 true
或 false
(这是 JSON 布尔类型)发送。
有趣的是,当反过来,从 JSON true
或 false
到 BOOL 属性时,RestKit 读取 JSON true/false
就好了,适当地设置属性。
【问题讨论】:
【参考方案1】:或者;您可以将其设为 bool 而不是 BOOL,restkit 会正确解析它。
@property (nonatomic) bool exported;
它在读取中正确处理它的原因是 bool 本质上只是 1 或 0...所以 Restkit 足够聪明,可以将其转换为 BOOL。
【讨论】:
值得一提的是,这似乎不再是 64 位版本的问题。【参考方案2】:Source type :NSCFBoolean
Destination type : NSString
Discussion: Boolean literals true and false parsed from JSON are mapped to NSString properties as @"true" and @"false"
来源:See This table
【讨论】:
没关系,但我想从 NSObject BOOL 属性映射到 JSON 布尔格式,即true
或 false
-- 因为 JSON 具有布尔类型。【参考方案3】:
这个问题源于 SQLite 没有布尔数据类型。因此,如果我的核心数据模式中有一个布尔值,它最终仍会作为整数存储在 SQLite 中(int 值为 1 或 0)。这就是为什么我在通过 RestKit 输出 JSON 时看到 1
或 0
的原因。
为了纠正这个问题,我将我的属性从原来的问题从 BOOL
更改为 NSNumber
:
@property (nonatomic) NSNumber *exported;
每当我分配给这个属性时,我都需要使用 NSNumber
布尔值来设置它。
target.exported = [NSNumber numberWithBool:[self.exported boolValue]];
现在生成的 JSON 是正确的,因为我将 NSNumber 设置为 boolValue
:
"exported" : true
【讨论】:
【参考方案4】:如果有人在 Swift 中使用 RestKit,并且遇到了一些问题,请不要忘记在属性中添加 dynamic
修饰符,并且 Bool
变量不能是可选的。因此使用以下内容:
dynamic var exported: Bool = false
查询问题:Bool Property Cannot be marked dynamic in swift
【讨论】:
以上是关于RESTKit 对象 BOOL 属性为真/假 JSON的主要内容,如果未能解决你的问题,请参考以下文章