【问题标题】:Unable to convert json string to json object无法将 json 字符串转换为 json 对象
【发布时间】:2017-11-14 13:11:38
【问题描述】:
let dictionaryToJsonObject: [String: Any]

let Dictionary: [String: Any] = ["FirstName": "John", "Email": "Jo@sm.com", "Password": "john@123", "LastName": "Smith", "Organization": ["Type": 5, "Name": "IT"]]

do {
    let jsonData = try JSONSerialization.data(withJSONObject: Dictionary as Any, options: .prettyPrinted)
    let jsonText = String(data: jsonData,
                          encoding: .ascii)

    print("JSON string = \(jsonText!)")

    if JSONSerialization.isValidJSONObject(jsonText!) {
        print("Valid")
    } else {
        print("Not Valid")
    }

}catch {
    print(error.localizedDescription)
}

输出将是:-

JSON string = {
  "FirstName" : "John",
  "Email" : "Jo@sm.com",
  "Password" : "john@123",
  "LastName" : "Smith",
  "Organization" : {
    "Type" : 5,
    "Name" : "IT"
  }
}

预期结果:

{   
    FirstName:"John",
    Email:"Jo@sm.com",
    Password:"john@123",
    LastName:"Smith",
    Organization:{
        Type:5,
        Name:"IT"
        }
}

【问题讨论】:

  • 两种结果有什么区别?为什么 .ascii 编码?将数据转换为字符串时应使用 utf8 编码!
  • encoding: .ascii — 你为什么要这样做?它以 UTF8 编码。它们只有前 128 个字符相同。
  • @Lion 输出在字符串 Json 格式中,预期一个在 json 对象格式中是否可能
  • @SanjayMishra :您正在将数据转换为 json 字符串!如果你想要对象形式的结果,那么你应该将它转换为 json 对象!参考我的回答!但最终它将成为您的字典!

标签: ios json swift string serialization


【解决方案1】:

如果你想以 json 对象形式获取它,那么你的代码应该是这样的,

  let dictionaryToJsonObject: [String: Any]

    let Dictionary: [String: Any] = ["FirstName": "John", "Email": "Jo@sm.com", "Password": "john@123", "LastName": "Smith", "Organization": ["Type": 5, "Name": "IT"]]

    do {
        let jsonData = try JSONSerialization.data(withJSONObject: Dictionary as Any, options: .prettyPrinted)
        let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: .init(rawValue: 0))


        print("JSON string = \(jsonObject)")

        if JSONSerialization.isValidJSONObject(jsonObject) {
            print("Valid")
        } else {
            print("Not Valid")
        }

    }catch {
        print(error.localizedDescription)
    }

你的输出将是,

JSON string = {
Email = "Jo@sm.com";
FirstName = John;
LastName = Smith;
Organization =     {
    Name = IT;
    Type = 5;
};
    Password = "john@123";
}
Valid

我认为最终它是你声明的字典本身!

【讨论】:

  • @Line 是的,你的权利我已经做了这个解决方案,但是我提到的 api 期望值作为字符串格式。你能告诉我任何解决方案来获得预期的输出吗
  • 您是否使用任何库与服务器通信?还是您直接使用NSURLSession 方法?
  • 通过JSONSerialization 进行往返是没有意义的——如果您只想将字典打印为NSDictionary,只需说print(dictionary as NSDictionary)。这是不是 JSON。
  • @SanjayMishra 您需要使用与JSONSerialization 不同的编码器,因为您的 API 期望的格式不是 JSON。您也不应该依赖 NSDictionary 的打印样式,因为这是一个实现细节。
猜你喜欢
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 2020-05-27
相关资源
最近更新 更多