Ich benutze NSJSONSerialization dataWithJSONObject, um meine Klassen zu JSON zu serialisieren. Wenn es einen BOOL serialisiert, gibt es ihm den Wert 1 oder 0 in der JSON-Zeichenfolge. Ich brauche das stattdessen wahr oder falsch. Ist das generisch möglich?Wie bekomme ich NSJSONSerialization einen Boolean als wahr oder falsch ausgeben?
Antwort
Nein, das Foundation Objekt für ein Bool ist NSNumber
numberWithBool
, das entweder 0 oder 1 wird. Wir haben kein Bool
Objekt. Gleiches gilt für das Lesen JSON
. Wahr/falsch wird wieder zu einem NSNumber
. Sie können eine Bool
Klasse erstellen und Ihren eigenen Parser erstellen. Arrays sind Arrays und JSON
Objekte sind NSDictionary
. Sie können die Schlüssel abfragen, testen, welche Klasse dahinter liegt und daraus den JSON
String erstellen.
danke, ich habe meine eigene JSONBool-Klasse erstellt und konnte es so funktionieren lassen –
@TritonMan Meinung mehr Code in der JSONBool-Klasse posten? Versuchen, das Gleiche zu erreichen. – TahoeWolverine
Ja, die Art, wie NSJSONSerialization funktioniert, hat sich im Laufe der Jahre verändert. Bitte notieren Sie das Datum, an dem diese Frage gestellt und beantwortet wurde. –
Wenn ich [NSNumber numberWithBool:NO]
erstelle, gibt die NSJSONSerialization das Wort "false" in der JSON-Zeichenfolge zurück.
EDIT Mit den neuen Verknüpfungen, die Sie auch diese handliche Jungs verwenden können:
@(YES)/ @(NO)
@(1) / @(0)
@YES / @NO
@1 / @0
diese Weise können Sie so etwas wie Looping durch Ihre Werte vermeiden. Ich möchte das genaue Gegenteil Verhalten aber NSNumber
Objekte haben. Also ich muss Schleife ...
EDIT II
mbi in den Kommentaren darauf hingewiesen, dass es einen Unterschied zwischen iOS-Versionen. Also hier ist ein iOS9 Test:
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}
Hier ist ein kleiner Vorbehalt zwischen iOS-Versionen! Dieser Code '[NSJSONSerialization dataWithJSONObject: @ {@" Test1 ": @ YES, @" Test2 ": @ (YES), @" Test3 ": @true, @" Test4 ": @ (true)} Optionen: nil error: nil] ' produziert diese json auf iOS 9 ' {"Test4": wahr, "Test3": true, "Test2": true, "Test1": true} ' aber produziert diese JSON auf iOS 8 und unter '{" Test4 ": 1," Test3 ": 1," Test2 ": true," Test1 ": true}' – mbi
Interessant ... Danke für diese Beobachtung! –
Nein, das habe ich nicht gesehen. Ich werde meinen Kommentar löschen. Danke für das Aufzeigen! –
Nur über diese selbst lief, nicht sicher, ob dies die beste Antwort ist, aber ...
Stellen Sie sicher, @YES oder @NO zu verwenden, dann ausgegeben json wird in es wahr/falsch:
[NSJSONSerialization dataWithJSONObject:@{@"test": @YES} options:0 error: nil];
So werden Sie Ihre anderen "booleans"/boolean wie Werte drehen müssen -> @YES/@NO beim Putten in das Wörterbuch für dataWithJSONObject.
[NSJSONSerialization dataWithJSONObject:@{@"test": (boolLikeValue ? @YES : @NO)} options:0 error: nil];
Ich stieß auf ähnliche Problem bei der Verwendung von CoreData Boolean, die auch als NSNumber gespeichert wird. Die einfachste Lösung für mich wurde mit @():
[NSJSONSerialization dataWithJSONObject:@{@"bool": @([object.value boolValue])} options:0 error: nil];
Ich denke, @() gibt den BOOL Wert erkennen und die NSNumber mit numberWithBool initialisieren: die
auf true/false in JSON führt Ja, es möglich ist, eine Boolesche (true/false) mit NSJSONSerialization durch Verwendung kCFBooleanTrue und kCFBooleanFalse zur Ausgabe:
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:kCFBooleanTrue, @"key_1",
kCFBooleanFalse, @"key_2",
nil]
dann
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:&error];
Ich habe gerade das Problem auf iOS9 getroffen. Mein Fall ist, dass ich eine CoreData-Eigenschaft workout.private
haben, die Bool auf NSNumber * wegen CoreData-Behandlung zugeordnet ist.
Wenn JSON Erstellen [NSNumber numberWithBool:workout.private.boolValue]
Sätze true/false in JSON erwartet, aber nur workout.private
oder @ (workout.private.boolValue) setzt "1" oder "0".
- 1. Server Antwort setzt Boolean auf wahr/falsch
- 2. sql boolean 0/1 Um wahr oder falsch darzustellen
- 3. Boolean immer als wahr zurück?
- 4. AutomaticMigrationsEnabled falsch oder wahr?
- 5. Android Bestätigungsdialog Rückkehr wahr oder falsch
- 6. Rails - Entsendung einen Boolean (wahr oder falsch) und die DB in der Steuerung
- 7. Objective-C WAHR/FALSCH vs wahr/falsch
- 8. Wie setze ich Python-Variablen auf wahr oder falsch?
- 9. while-Schleife und interpretieren von Werten als wahr oder falsch
- 10. wie wahr oder falsch zurück, wenn ich Code window.confirm mich
- 11. Warum kann ich nicht wahr oder falsch in der Konsole
- 12. Wahr bis widerlegt oder falsch bis bewiesen?
- 13. Wie JAXB rendern boolean als 0 und 1, nicht wahr und falsch
- 14. Warum sollte ich Boolean als Parameter anstelle von "boolean" übergeben?
- 15. Sudoku-Code zum Zurückgeben Wahr oder Falsch
- 16. Wie bekomme ich wahr oder falsch von PHP-Funktion mit AJAX?
- 17. Java: Boolean immer wieder wahr
- 18. .net Referenz spezifische Version wahr oder falsch?
- 19. PHP Werte als weder wahr noch falsch
- 20. Erhalten Sie boolesche Werte als wahr oder falsch statt 1 oder 0
- 21. Python Listen anhängen Wahr Boolean
- 22. phpmailer gibt nicht wahr oder falsch
- 23. HTML Wahr oder falsch im Editor?
- 24. Wahr oder falsch bei SAS-Musterübereinstimmung zurückgeben
- 25. Sortiert NSJSONSerialization Nummern als NSDecimalNumber?
- 26. Warum gibt Javascript ODER einen anderen Wert als wahr/falsch zurück?
- 27. Wie überprüfe ich, ob eine Methode wahr oder falsch in einer IF-Anweisung in Java zurückgibt?
- 28. Verwendung unterstreichen wahr oder falsch zurück mit Findwhere
- 29. Prüfen, ob Boolean wahr ist?
- 30. Wie überprüft man, ob ein Parameter wahr oder falsch ist?
Irgendwelche von diesen sind wirklich die wirkliche Antwort: http://Stackoverflow.com/a/17234722/105903 oder http://stackoverflow.com/a/28450291/105903. Darf ich es als solches bezeichnen? –
Es sei denn, Sie sind ein Zeitfahrer, es ist nicht die richtige Antwort. Bitte notieren Sie das Datum, an dem diese Frage gestellt und beantwortet wurde. Vielen Dank. –