2017-10-17 3 views
1

J'ai besoin de transmettre des données comme les suivantes:ce qui est correct Swift 3 type de données pour les valeurs complexes de paire de clés pour JSONSerialized URLRequest

{ 
    "key":"355-3a34c", 
    "status": [ 
     { 
      "car info": [ 
       { 
        "body": "composite", 
        "doors": "standard", 
        "type": "sedan" 
       } 
      ], 
      "trim": "luxury", 
      "headlights": "led", 
      "tires": 4, 
      "step": "prepare for display", 
      "soapType": "soft scrub", 
      "attributes": [] 
     }, 
     { 
      "step": "display", 
      "days": 30, 
      "location": "front" 
     } 
    ] 
} 

dans un URLRequest après JSONSerialization:

let convertedString = String(data: myData, encoding: String.Encoding.utf8) // the data will be converted to the string 

Quelques choses à noter:

  1. L'une des clés est répétée ("step")
  2. Il est une clé complexe: { "car info": [{ "body": "composite", "doors": "standard", "type": "sedan" }]

j'ai pu charger les données dans un dictionnaire de dictionnaires qui m'a permis d'avoir des clés en double. Mais, bien sûr, j'ai découvert que, comme les données ne sont pas garanties de conserver l'ordre dans lequel elles ont été entrées, la sortie était inutilisable car j'ai besoin de conserver l'ordre des données pour conserver son sens.

Je suis à la recherche d'un type de données qui peuvent:

  1. poignée clés en double
  2. gérer des données complexes
  3. être un type de données acceptable pour JSONSerialization
  4. conserve l'ordre des données était entré

Je suis tombé sur le type de données littéral du dictionnaire et y ai converti mes données. Il ne semble pas accepter le type de données complexe de { "car info": [{ "body": "composite", "doors": "standard", "type": "sedan" }].

De plus, quand j'omis la structure de données complexe, juste pour le test, je suis arrivé cette erreur quand il est sérialisé comme un littéral dictionnaire:

'NSInvalidArgumentException', reason: '*** +[NSJSONSerialization dataWithJSONObject:options:error:]: Invalid top-level type in JSON write'. 

Quel type de données ou combinaison de types de données puis-je utiliser pour Swift 3 répondant aux critères dont j'ai besoin?

Un grand merci.

+1

Vous n'avez pas besoin d'utiliser un type de données Swift et 'JSONSerialization' - vous pouvez simplement construire la chaîne vous-même en utilisant la concaténation et la mise en forme des chaînes. –

+0

N'ai-je pas besoin de la sérialisation JSON? Je pensais que JSONSerialization produit une sortie comme celle-ci que j'ai besoin de créer: 3a7b2273 65232369 636e4994 ... – Jazzmine

+0

'{" car info ": [{" body ": composite," portes ":" standard "," type ":" berline " }]. 'Ce n'est pas complexe, c'est un dictionnaire avec une clé (" info voiture ") et la valeur correspondante est un tableau avec un seul objet (un dictionnaire). "1) gérer les clés en double": Non. Vous ne voulez pas cela, vous voulez une clé, avec un tableau (qui ont un ordre). – Larme

Répondre

0

JSONSerialization ne vous permet pas de contrôler l'ordre des clés, mais vous n'avez pas besoin de l'utiliser pour créer du texte de type JSON.

Vous pouvez simplement ajouter un groupe de chaînes, puis l'encoder vous-même dans Data.