用Swift编写词典

用Swift编写词典,swift,dictionary,stringify,Swift,Dictionary,Stringify,我有这个对象[字典] [{ "addCity" : "Xyz", "addLandmark" : "Shopper", "addCountry" : "Abc", "addPincode" : "122001", "isPrimary" : "false", "addAddress" : "S44", "addState" : "abc", "addAddress2" : "Grand Road", "addContact" : "11111111", "addName" : "John" }]

我有这个对象[字典]

[{
"addCity" : "Xyz",
"addLandmark" : "Shopper",
"addCountry" : "Abc",
"addPincode" : "122001",
"isPrimary" : "false",
"addAddress" : "S44",
"addState" : "abc",
"addAddress2" : "Grand Road",
"addContact" : "11111111",
"addName" : "John"
}]
并希望将其转换为:

"{\"addAddress\":\"S44\",\"addAddress2\":\"Grand Road\",\"addCity\":\"Xyz\",\"addContact\":\"11111111\",\"addCountry\":\"abc\",\"addLandmark\":\"Shopper\",\"addName\":\" John\",\"addPincode\":\"122002\",\"addState\":\"abc\",\"isPrimary\":true}"
这意味着我必须严格规定上述值,并尝试了各种方法,但没有找到任何解决方案

我试过这个

do {
        let arrJson = try JSONSerialization.data(withJSONObject: dataAddress, options: JSONSerialization.WritingOptions.prettyPrinted)
        let string = String(data: arrJson, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))
        let tempJson = string! as String
        print("%%%%%%",tempJson)
    }catch let error as NSError{
        print(error.description)
    }
但它只是以JSON的形式重新运行了相同的代码


请帮帮我。

这可能会奏效,但你可以随意摆弄它(Swift 3):


这里是一个安全/交流的扩展:

extension Dictionary where Key == String, Value == Any {
    var stringified: String? {
        do {
            let data = try JSONSerialization.data(withJSONObject: self, options: .prettyPrinted)
            guard let stringy = String(data: data, encoding: .utf8) else {
                print("ERROR: failed to cast data as string")
                return nil
            }
            return stringy
        } catch let err {
            print("error with " + #function + ": " + err.localizedDescription)
            return nil
        }
    }
}
这里有一个替代方案,可以为您节省可编码对象的时间

extension Encodable  
    var stringified: String? {
        let encoder = JSONEncoder()
        encoder.outputFormatting = .prettyPrinted
        guard let data = try? encoder.encode(self) else { return nil }
        return String(data: data, encoding: .utf8)
    }
}

这是什么东西?看起来您只有一个数据(JSON字符串)。如果您只想打印从API
字符串返回的数据(数据:data,encoding:.utf8)
这不是一个有效的Swift字典数组,而是一个字典数组。试着让其中一个项目进行转换。我从我这边创建这个对象,并且必须将这个对象以stringify形式发送到服务器。为什么您需要字符串而不是JSON数据来发布?
extension Encodable  
    var stringified: String? {
        let encoder = JSONEncoder()
        encoder.outputFormatting = .prettyPrinted
        guard let data = try? encoder.encode(self) else { return nil }
        return String(data: data, encoding: .utf8)
    }
}