首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Swift中将字典转换为JSON

在Swift中将字典转换为JSON
EN

Stack Overflow用户
提问于 2015-04-14 18:34:09
回答 9查看 310K关注 0票数 221

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

代码语言:javascript
复制
var postJSON = [ids[0]:answersArray[0], ids[1]:answersArray[1], ids[2]:answersArray[2]] as Dictionary

我得到了:

代码语言:javascript
复制
[2: B, 1: A, 3: C]

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

EN

回答 9

Stack Overflow用户

发布于 2015-04-14 20:59:35

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

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

Swift 3版本:

代码语言:javascript
复制
import Foundation

let 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!)")
}

要以“美观的打印”格式显示上述内容,您需要将选项行更改为:

代码语言:javascript
复制
    options: [.prettyPrinted]

或者在Swift 2语法中:

代码语言:javascript
复制
import Foundation
 
let 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!)")

它的输出是

代码语言:javascript
复制
"JSON string = {"anotherKey":"anotherValue","aKey":"aValue"}"

或者用漂亮的格式:

代码语言:javascript
复制
{
  "anotherKey" : "anotherValue",
  "aKey" : "aValue"
}

正如您所期望的那样,字典在JSON输出中包含在大括号中。

编辑:

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

代码语言:javascript
复制
  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)")
    }
  }
票数 190
EN

Stack Overflow用户

发布于 2015-09-07 20:31:45

我对你的问题的回答如下

代码语言:javascript
复制
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: String.Encoding.utf8.rawValue)! as String

print(jsonString)

答案是

代码语言:javascript
复制
{
  "0" : "ArrayObjectOne",
  "1" : "ArrayObjecttwo",
  "2" : "ArrayObjectThree"
}
票数 34
EN

Stack Overflow用户

发布于 2019-01-10 03:01:15

Swift 4 Dictionary扩展。

代码语言:javascript
复制
extension Dictionary {
    var jsonStringRepresentation: String? {
        guard let theJSONData = try? JSONSerialization.data(withJSONObject: self,
                                                            options: [.prettyPrinted]) else {
            return nil
        }

        return String(data: theJSONData, encoding: .ascii)
    }
}
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29625133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档