-3
votes

Obtenir la valeur null lorsque la valeur de la chaîne d'analyse de JSON iOS Swift

Je reçois un Json à partir de mon serveur. Mon serveur JSON est

let action = message["action"]
print(action)


3 commentaires

La valeur du message est une autre chaîne JSON. Vous devez le désérialiser avec jsonserialization ou décodable , vous pouvez accéder aux clés et aux valeurs.


Comment puis-je faire cela peut s'il vous plaît partager un exemple


S'il vous plaît, des questions sur la sérialisation JSON sont l'une des questions les plus fréquemment posées ici.


3 Réponses :


0
votes

comme VADIAN SIR a dit, la valeur de la clé message est une autre chaîne JSON, afin d'obtenir la valeur de action de < Message fort> , vous avez besoin Pour le désérialiser avec jsonserialization comme ci-dessous et obtenez la valeur de la clé action . xxx

espère que cela aide cela aide. < / p>


1 commentaires

Je reçois une erreur en exécution pour une mauvaise exécution en première ligne



0
votes

Vérifiez ceci: Convertir la chaîne JSON en Objet JSON dans Swift 4

Convertir le texte du message dans JSON: P>

let messageStr = message as! String
let data = messageStr.data(using: .utf8)!
do {
    if let jsonArray = try JSONSerialization.jsonObject(with: data, options : .allowFragments) as? [Dictionary<String,Any>]
    {
       print(jsonArray) // use the json here    

        let action = jsonArray["action"]
        print(action) // your action is here

    } else {
        print("bad json")
    }
} catch let error as NSError {
    print(error)
}


2 commentaires

Obtenir cette erreur, la valeur de type 'json' n'a aucun membre de "données" sur la première ligne


S'il vous plaît ne vous recommandez pas d'utiliser jsonserialization lorsque nous avons codable



1
votes

Je recommande entièrement SWIFTYJSON et jsonserialization entièrement, utilisez codable code> à la place.

Utilisez-le pour analyser le JSON intérieur contenu dans Message p>

struct Message: Codable {
    let action: String
    let msg: Msg
}

struct Msg: Codable {
    let headline, subhead, brief: String
    let contentID: Int

    enum CodingKeys: String, CodingKey {
        case headline, subhead, brief
        case contentID = "content_id"
    }
}

if let messageStr = userInfo["message"] as? String {
  let messageData = messageStr.data(using: .utf8 )!
  let message = try JSONDecoder().decode(Message.self, from: messageData)
}


7 commentaires

Xcode se plaignent de remplacer "décodeur" avec "décodage" après la fin de l'automobile, il ne peut pas convertir la valeur de type '[Anyhashable: tout]' à l'argument attendu 'Data'


Je reçois des données de userinfo, mais quand je passe cette variable, je gatant la même erreur ici Ie quelle passe, laissez Fullinfo = essayer jsondecoder (). Décode (FullInfo.elf, de: userinfo)


Il donne une erreur "Impossible de convertir la valeur de type '[anyhashable: tout]" sur l'argument attendu "données" "


On dirait que vous passez le résultat d'une initiale jsonserialization appel. Ne faites pas cela, transmettez les données brutes au décodeur (c.-à-d. Ce que vous aviez utilisé pour atteindre ce dictionnaire.


J'ai été mis à jour ma question espère que cela vous aidera à comprendre mon problème ..


Donc, vous n'obtenez pas JSON (sauf dans le message ), mais plutôt une notification push. Mise à jour de ma réponse.


Maintenant, obtenez cette valeur d'erreur de type '[Anyhashable: tout]' n'a aucun membre de membre '