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