web-dev-qa-db-fra.com

Comment convertir une chaîne JSON en objet JSON avec swift?

J'essaie de générer un objet JSON et de le convertir en chaîne JSON. Ce processus a été placé avec succès. Mais mon vrai problème se pose lorsque j'essaie de convertir JSON String en objet JSON. Quand j'essaye je suis nul comme résultat.

func generateJSONObject() {
        let jsonObject = createJSONObject(firstName: firstName[0], middleName: middleName[0], lastName: lastName[0], age: age[0], weight: weight[0])
        print("jsonObject : \(jsonObject)")

        let jsonString = jsonObject.description // convert It to JSON String
        print("jsonString : \(jsonString)")

        let jsonObjectFromString = convertToDictionary(text: jsonString)
        print("jsonObjectFromString : \(String(describing: jsonObjectFromString))")

    }

createJSONObject func

// JSON Object creation
    func createJSONObject(firstName: String, middleName: String, lastName: String, age: Int, weight: Int) -> [String: Any] {

        let jsonObject: [String: Any] = [
            "user1": [
                "first_name": firstName,
                "middle_name": middleName,
                "last_name": lastName,
                "age": age,
                "weight": weight
            ]
        ]
        return jsonObject
    }

convertToDictionary func

func convertToDictionary(text: String) -> [String: Any]? {
        if let data = text.data(using: .utf8) {
            do {
                return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
            } catch {
                print(error.localizedDescription)
            }
        }
        return nil
    }

Les journaux

  1. Quand j'imprime JSON Objet, je reçois

jsonObject: ["user1": ["age": 21, "prénom du milieu": "Lazar", "dernier nom": "V", "poids": 67, "premier nom": "Alwin"]]

  1. Quand j'imprime JSON String je reçois

    jsonString: ["user1": ["age": 21, "prénom du milieu": "Lazar", "dernier nom": "V", "poids": 67, "premier nom": "Alwin"]]

  2. Convertir JSON String en JSON Object que j'obtiens au-dessous de l'erreur

    Les données ne peuvent pas être lues car elles ne sont pas au format correct.

    jsonObjectFromString: nil

Je ne sais pas pourquoi cela se passe. Je veux convertir JSON String en JSON Object et je veux analyser le JSON.

3
Alwin

basé sur la discussion

import Foundation

let firstName = "Joe"
let lastName = "Doe"
let middleName = "Mc."
let age = 100
let weight = 45

let jsonObject: [String: [String:Any]] = [
    "user1": [
        "first_name": firstName,
        "middle_name": middleName,
        "last_name": lastName,
        "age": age,
        "weight": weight
    ]
]
if let data = try? JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted),
    let str = String(data: data, encoding: .utf8) {
    print(str)
}

empreintes

{
  "user1" : {
    "age" : 100,
    "middle_name" : "Mc.",
    "last_name" : "Doe",
    "weight" : 45,
    "first_name" : "Joe"
  }
}
2
user3441734

Json doit être dans Array ou Dictionary, il ne peut s'agir que de chaîne. Pour créer une chaîne json, vous devez d'abord convertir au format Data, puis convertir en String.

   func generateJSONObject() {
       let jsonObject = createJSONObject(firstName: "firstName", middleName: "middleName", lastName: "lastName", age: 21, weight: 82)
       print("jsonObject : \(jsonObject)")

       if let jsonString = convertToJsonString(json: jsonObject), let jsonObjectFromString = convertToDictionary(text: jsonString) {
           print("jsonObjectFromString : \(jsonObjectFromString)")
       }
    }

    func convertToJsonString(json: [String: Any]) -> String? {
        do {
            let jsonData = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
            return String(data: jsonData, encoding: .utf8)
        } catch {
            print(error.localizedDescription)
        }
        return nil
    }
0
Suhit Patil