为了账号安全,请及时绑定邮箱和手机立即绑定

在SWIFT中将字典转换为JSON

/ 猿问

在SWIFT中将字典转换为JSON

慕婉清6462132 2019-12-18 13:12:38

在SWIFT中将字典转换为JSON

我已经创建了下一个字典:

var postJSON = [ids[0]:answersArray[0], ids[1]:answersArray[1], ids[2]:answersArray[2]] as Dictionary

我得到了:

[2: B, 1: A, 3: C]

那么,如何将其转换为JSON呢?



查看完整描述

3 回答

?
慕的地6264312

SWIFT 3.0

使用SWIFT 3,名称为NSJSONSerialization和它的方法已经改变了,根据SWIFT API设计指南.

let dic = ["2": "B", "1": "A", "3": "C"]do {
    let jsonData = try JSONSerialization.data(withJSONObject: dic, options: .prettyPrinted)
    // here "jsonData" is the dictionary encoded in JSON data
    let decoded = try JSONSerialization.jsonObject(with: jsonData, options: [])
    // here "decoded" is of type `Any`, decoded from JSON data
    // you can now cast it with the right type        
    if let dictFromJSON = decoded as? [String:String] {
        // use dictFromJSON    }} catch {
    print(error.localizedDescription)}

SWIFT 2.x

do {
    let jsonData = try NSJSONSerialization.dataWithJSONObject(dic, options: NSJSONWritingOptions.PrettyPrinted)
    // here "jsonData" is the dictionary encoded in JSON data
    let decoded = try NSJSONSerialization.JSONObjectWithData(jsonData, options: [])
    // here "decoded" is of type `AnyObject`, decoded from JSON data
    // you can now cast it with the right type 
    if let dictFromJSON = decoded as? [String:String] {
        // use dictFromJSON    }} catch let error as NSError {
    print(error)}

SWIFT 1

var error: NSError?if let jsonData = NSJSONSerialization.dataWithJSONObject(dic, options: NSJSONWritingOptions.PrettyPrinted, error: &error) {
    if error != nil {
        println(error)
    } else {
        // here "jsonData" is the dictionary encoded in JSON data    }}if let decoded = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as? [String:String] {
    if error != nil {
        println(error)
    } else {
        // here "decoded" is the dictionary decoded from JSON data    }}



查看完整回答
反对 回复 2019-12-19
?
慕容3067478

你做了错误的假设。仅仅因为调试器/Playplace在方括号中显示字典(Cocoa显示字典的方式),这并不意味着JSON输出的格式化方式。

下面是将字符串字典转换为JSON的示例代码:

SWIFT 3版本:

import Foundationlet dictionary = ["aKey": "aValue", "anotherKey": "anotherValue"]if let theJSONData = try? JSONSerialization.data(
    withJSONObject: dictionary,
    options: []) {
    let theJSONText = String(data: theJSONData,
                               encoding: .ascii)
    print("JSON string = \(theJSONText!)")}

若要以“漂亮打印”格式显示上述内容,请将选项行更改为:

    options: [.prettyPrinted]

或者在SWIFT 2语法中:

import Foundationlet dictionary = ["aKey": "aValue", "anotherKey": "anotherValue"]let theJSONData = NSJSONSerialization.dataWithJSONObject(
  dictionary ,
  options: NSJSONWritingOptions(0),
  error: nil)let theJSONText = NSString(data: theJSONData!,
  encoding: NSASCIIStringEncoding)println("JSON string = \(theJSONText!)")

它的输出是

"JSON string = {"anotherKey":"anotherValue","aKey":"aValue"}"

或者用漂亮的格式:

{
  "anotherKey" : "anotherValue",
  "aKey" : "aValue"}

字典在JSON输出中用大括号括起来,正如您所预期的那样。

编辑:

在SWIFT 3/4语法中,上面的代码如下所示:

  let dictionary = ["aKey": "aValue", "anotherKey": "anotherValue"]
    if let theJSONData = try?  JSONSerialization.data(
      withJSONObject: dictionary,
      options: .prettyPrinted      ),
      let theJSONText = String(data: theJSONData,
                               encoding: String.Encoding.ascii) {
          print("JSON string = \n\(theJSONText)")
    }
  }



查看完整回答
反对 回复 2019-12-19
?
慕工程0101907

我对你的问题的回答如下

let dict = ["0": "ArrayObjectOne", "1": "ArrayObjecttwo", "2": "ArrayObjectThree"]var error : NSError?let jsonData = try! NSJSONSerialization.dataWithJSONObject(dict, options: NSJSONWritingOptions.PrettyPrinted)let jsonString = NSString(data: jsonData, encoding: NSUTF8StringEncoding)! as Stringprint(jsonString)

答案是

{
  "0" : "ArrayObjectOne",
  "1" : "ArrayObjecttwo",
  "2" : "ArrayObjectThree"}



查看完整回答
反对 回复 2019-12-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信