JSON Datentyp erkennen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • JSON Datentyp erkennen

    Hi,

    ich muss ein JSON auswerten, bei dem in verschiedenen Datensätzen für einen Key unterschiedliche Datentypen verwendet wurde.
    z.B. so:

    Quellcode

    1. {"Name":"Willi","Alter":39},{"Name":"Hermann","Alter":"verstorben"}
    Jetzt habe ich in meiner Datenstruktur natürlich für Alter ein Int vorgesehen (ich wußte zu anfang noch nicht, dass auch String dort vorkommen kann).
    Das muss ich jetzt ändern, denn den JSON kann ich nicht ändern.

    Gibt es eine Möglichkeit aus in einem jsonDictionary zu erkennen, welcher Datentyp zu einem Key gefunden wurde? Oder gibt es in Swift eine Variable mit mehreren Datentypen deklarieren?
  • Der JSON-String ist ja nur ein Beispiel. Von daher hast du natürlich Recht, ist aber erst mal irrelevant.

    Gibt es auch eine Möglichkeit innerhalb einer Klasse eine Variable mit unterschiedlichen Datentypen zu deklarieren? In Delphi gibt es den Datentyp "Variant", in dem ich unterschiedliche Datentypen (Int, String, ...) verwenden kann. Gibt es ein Äquivalent in Swift?
  • Captnemo schrieb:

    Der JSON-String ist ja nur ein Beispiel. Von daher hast du natürlich Recht, ist aber erst mal irrelevant.

    Gibt es auch eine Möglichkeit innerhalb einer Klasse eine Variable mit unterschiedlichen Datentypen zu deklarieren? In Delphi gibt es den Datentyp "Variant", in dem ich unterschiedliche Datentypen (Int, String, ...) verwenden kann. Gibt es ein Äquivalent in Swift?
    Vieles was du in Delphi kennst wirst du nicht in anderen Sprachen anwenden können. Delphi ist, jedenfalls die Version die ich kenne, total veraltet und macht viele Sachen anders als die anderen Sprachen. Die For, While etc. Schleifen sind da meines Erachtens grauenvoll und := für die Variablenzuweisung und = für den Vergleich finde ich totalen Blödsinn! Ich muss damit in der Schule, zum Glück nur zu Tests, damit arbeiten! Es ist DAS Grauen!! Wir haben auch noch Delphi 7, was es nicht besser macht.
  • AppleDeveloper schrieb:

    Captnemo schrieb:

    Der JSON-String ist ja nur ein Beispiel. Von daher hast du natürlich Recht, ist aber erst mal irrelevant.

    Gibt es auch eine Möglichkeit innerhalb einer Klasse eine Variable mit unterschiedlichen Datentypen zu deklarieren? In Delphi gibt es den Datentyp "Variant", in dem ich unterschiedliche Datentypen (Int, String, ...) verwenden kann. Gibt es ein Äquivalent in Swift?
    Vieles was du in Delphi kennst wirst du nicht in anderen Sprachen anwenden können. Delphi ist, jedenfalls die Version die ich kenne, total veraltet und macht viele Sachen anders als die anderen Sprachen. Die For, While etc. Schleifen sind da meines Erachtens grauenvoll und := für die Variablenzuweisung und = für den Vergleich finde ich totalen Blödsinn! Ich muss damit in der Schule, zum Glück nur zu Tests, damit arbeiten! Es ist DAS Grauen!! Wir haben auch noch Delphi 7, was es nicht besser macht.
    Was hat das Problem jetzt mit Delphi zu tun? ;)

    Die meisten Sprachen werden dafür einen Typ haben.

    Bei Objective-C id

    Bei Swift eben Any / AnyObject

    hier noch mal beschrieben developer.apple.com/library/io…uid/TP40014097-CH22-ID342
  • matz schrieb:

    Die meisten Sprachen werden dafür einen Typ haben.
    Naja, ist die Frage, was man genau meint: Wenn ein Verweis auf eine Speicherstelle reicht, dann sind beispielsweise C und C++ dank void * mit von der Partie. Möchtest du hingegen mit diesem Typ (ohne Cast) direkt etwas anstellen können, fliegt auch Swift aus der Liste.
    „Meine Komplikation hatte eine Komplikation.“
  • Captnemo schrieb:

    Das muss ich jetzt ändern, denn den JSON kann ich nicht ändern.
    Gibt es eine Möglichkeit aus in einem jsonDictionary zu erkennen, welcher Datentyp zu einem Key gefunden wurde?
    Das ist definiert: Null, Bool, Zahl, String, Array, Object.
    Siehe: json.org oder Datenstruktur_und_Formatdefinition

    Ggfs. mit Erweiterung:
    JSON Schema

    P.S.: Alternativen:
    BSON, MsgPack, ProtoBuf, etc.
    * Kann Spuren von Erdnüssen enthalten.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von NSObject ()

  • AppleDeveloper schrieb:

    Captnemo schrieb:

    Der JSON-String ist ja nur ein Beispiel. Von daher hast du natürlich Recht, ist aber erst mal irrelevant.

    Gibt es auch eine Möglichkeit innerhalb einer Klasse eine Variable mit unterschiedlichen Datentypen zu deklarieren? In Delphi gibt es den Datentyp "Variant", in dem ich unterschiedliche Datentypen (Int, String, ...) verwenden kann. Gibt es ein Äquivalent in Swift?
    Vieles was du in Delphi kennst wirst du nicht in anderen Sprachen anwenden können. Delphi ist, jedenfalls die Version die ich kenne, total veraltet und macht viele Sachen anders als die anderen Sprachen. Die For, While etc. Schleifen sind da meines Erachtens grauenvoll und := für die Variablenzuweisung und = für den Vergleich finde ich totalen Blödsinn! Ich muss damit in der Schule, zum Glück nur zu Tests, damit arbeiten! Es ist DAS Grauen!! Wir haben auch noch Delphi 7, was es nicht besser macht.
    Sicherlich ist Delphi nicht unbedingt die modernste Sprache. Natürlich hat sich aber auch diese in den letzten Jahre um einiges weiterentwickelt.
    Und := als Zuweisung und = als Vergleich....das sind wohl nur sprachenspezifische Syntaxregeln. Da könnte man genauso gut umgekehrt argumentieren. Ist halt historisch gewachsen.
    Eine derartige Diskussion finde ich unsachlich und hat auch mit diesem Thread nichts zu tun.