NSJSONSerialization dataWithJSONObjectを使用して、クラスをJSONにシリアル化します。BOOLをシリアル化すると、JSON文字列で値1または0が与えられます。代わりに、これがtrueまたはfalseである必要があります。これを一般的に行うことは可能ですか?
6 に答える
を作成する[NSNumber numberWithBool:NO]
と、NSJSONSerializationはJSON文字列に「false」という単語を返します。
編集新しいショートカットを使用すると、これらの便利な人を使用することもできます:
@(YES) / @(NO)
@(1) / @(0)
@YES / @NO
@1 / @0
このようにして、値をループするようなことを避けることができます。正反対の動作が必要ですが、NSNumber
オブジェクトがあります。だから私はループする必要があります...
編集II
mbiはコメントの中で、iOSのバージョンには違いがあると指摘しました。だからここにiOS9テストがあります:
NSDictionary *data = @{
@"a": @(YES),
@"b": @YES,
@"c": @(1),
@"d": @1
};
NSLog(@"%@", [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:data options:0 error:nil] encoding:NSUTF8StringEncoding]);
2016-07-05 02:23:43.964 Test App[24581:6231996] {"a":true,"b":true,"c":1,"d":1}
これに出くわしただけで、これが最良の答えかどうかはわかりませんが...
必ず@YESまたは@NOを使用してください。そうしないと、出力されたjsonにtrue/falseが含まれます。
[NSJSONSerialization dataWithJSONObject:@{@"test": @YES} options:0 error: nil];
したがって、dataWithJSONObjectのディクショナリに入れるときは、他の「ブール値」/ブール値のような値-> @YES/@NOを有効にする必要があります。
[NSJSONSerialization dataWithJSONObject:@{@"test": (boolLikeValue ? @YES : @NO)} options:0 error: nil];
はい、 kCFBooleanTrueおよびkCFBooleanFalseを使用して、NSJSONSerializationでブール値(true / false)を出力することができます。
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:kCFBooleanTrue, @"key_1",
kCFBooleanFalse, @"key_2",
nil]
それから
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:&error];
いいえ、BoolのFoundation ObjectはNSNumber
numberWithBool
、0または1になります。ObjectはありませんBool
。同じように読んでJSON
ください。真/偽はNSNumber
再びなります。
Bool
クラスを作成して、独自のパーサーを作成できます。配列は配列であり、JSON
オブジェクトはNSDictionary
です。キーを照会し、背後にあるクラスをテストして、これからJSON
文字列を作成できます。
NSNumberとしても保存されているCoreDataのブール値を使用しているときに、同様の問題が発生しました。私にとって最も簡単な解決策は@()を使用することでした:
[NSJSONSerialization dataWithJSONObject:@{@"bool": @([object.value boolValue])} options:0 error: nil];
@()はBOOL値を認識し、NSNumberをnumberWithBoolで初期化すると思います:これはJSONでtrue/falseになります
iOS9で問題が発生しました。私の場合、workout.private
CoreData処理のためにNSNumber*にブールマッピングされたCoreDataプロパティがあります。
JSONセットを作成する場合、JSON
[NSNumber numberWithBool:workout.private.boolValue]
でtrue / falseが期待されますが、workout.private
@(workout.private.boolValue)は「1」または「0」を設定します。