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 格式的 10 发送。如何设置 RestKit 以便所有 BOOL 都以 truefalse(这是 JSON 布尔类型)发送。

有趣的是,当反过来,从 JSON truefalse 到 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 布尔格式,即 truefalse -- 因为 JSON 具有布尔类型。【参考方案3】:

这个问题源于 SQLite 没有布尔数据类型。因此,如果我的核心数据模式中有一个布尔值,它最终仍会作为整数存储在 SQLite 中(int 值为 1 或 0)。这就是为什么我在通过 RestKit 输出 JSON 时看到 10 的原因。

为了纠正这个问题,我将我的属性从原来的问题从 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的主要内容,如果未能解决你的问题,请参考以下文章

使用 restkit 映射到复杂对象

在 GET 上创建的 RestKit 托管对象总是为 bool 返回 false

c++ bool

js中可转bool为false的值

PHP基本语法

all(iterable) any(iterable) 对可迭代对象的每个元素(分子)进行判断。