简体   繁体   English

如何在swift中将JSON字符串转换为JSON对象?

[英]How to convert JSON String to JSON Object in swift?

I trying to generate JSON Object and convert that to JSON String and that process is Successfully placed. 我尝试生成JSON对象并将其转换为JSON String,并且该进程已成功放置。 But my real problem rises when I try to convert JSON String to JSON Object. 但是当我尝试将JSON String转换为JSON对象时,我的真正问题就出现了。 When I try I get nil as result. 当我尝试时,我得到的结果为零。

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 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 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
    }

Logs 日志

  1. When I print JSON Object I get 当我打印JSON对象时,我得到了

jsonObject : ["user1": ["age": 21, "middle_name": "Lazar", "last_name": "V", "weight": 67, "first_name": "Alwin"]] jsonObject:[“user1”:[“age”:21,“middle_name”:“Lazar”,“last_name”:“V”,“weight”:67,“first_name”:“Alwin”]]

  1. When I print JSON String I get 当我打印JSON字符串时,我得到了

    jsonString : ["user1": ["age": 21, "middle_name": "Lazar", "last_name": "V", "weight": 67, "first_name": "Alwin"]] jsonString:[“user1”:[“age”:21,“middle_name”:“Lazar”,“last_name”:“V”,“weight”:67,“first_name”:“Alwin”]]

  2. Convert JSON String to JSON Object I get below error JSON字符串转换为JSON对象我得到以下错误

    The data couldn't be read because it isn't in the correct format. 无法读取数据,因为格式不正确。

    jsonObjectFromString : nil jsonObjectFromString:nil

I don't know why this happening. 我不知道为什么会这样。 I want to convert JSON String to JSON Object and I want to parse the JSON . 我想将JSON String转换为JSON对象,我想解析JSON

based on 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)
}

prints 版画

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

Json has to be in Array or Dictionary, it can't be only string so to create a jsonstring first you need to convert to Data format and then convert to String Json必须在Array或Dictionary中,它不能只是字符串所以要创建一个jsonstring首先需要转换为Data格式然后转换为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
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM