字典自动在 swift 中添加反斜杠 \
dictionary automatically adding backslash \ in swift
我尝试将 json 放入字典中,然后使用 alamofire
将该字典发送到服务器
我制作了 json 字符串,但是当我把它放入字典时
词典自动将“\”添加到我的json字符串中!
我该怎么办?
这是我的:
internal var registers : [ [String:String] ] = []
registers.append(["fullName" :"ali","mid" :"406070","phoneNumber":"0912033"])
let jsonData = try! JSONEncoder().encode(registers)
let jsonString = String(data: jsonData, encoding: .utf8)!
let regjson = jsonString
let parameters: [String: String] = [
"registers": regjson
]
结果是
["registers": "[{\"mid\":\"406070\",\"fullName\":\"ali\",\"phoneNumber\":\"0912033\"}]"]
应该是这样的
["registers": [{"fullName":"ali","mid":"406070","phoneNumber":"0912033"}]]
what should i do ?
没什么,反斜杠是虚的。添加它们是为了在文字字符串中显示双引号。
您正在使用字典,将其编码为 JSON 的字符串。这个过程工作正常。如果您查看 regjson
,您会发现它很好。自己看看:
let registers = [
["fullName" :"ali","mid" :"406070","phoneNumber":"0912033"]
]
let registersJsonData = try! JSONEncoder().encode(registers)
let registersJsonString = String(data: registersJsonData, encoding: .utf8)!
print(registersJsonString) // Looks just fine.
// => [{"mid":"406070","fullName":"ali","phoneNumber":"0912033"}]
但是您随后将这个 json 字符串放入另一个字典,然后将整个内容重新序列化为另一个 json 字符串。系统不知道键 "registers"
的字符串值已经是 JSON 序列化的字符串。它认为它是一个普通字符串,与 "Mary had a little lamb."
之类的东西没有什么不同。它像任何其他字符串一样序列化了这个字符串。这样做涉及转义出 JSON 语法中具有其他含义的符号。
系统运行正常,您只是要求它做一些您不想做的事情。
您可能正在寻找的是:
let registers = [
["fullName": "ali", "mid" :"406070", "phoneNumber": "0912033"]
]
let parameters = [
"registers": registers
]
let parametersJsonData = try! JSONEncoder().encode(parameters)
let parametersJsonString = String(data: parametersJsonData, encoding: .utf8)!
print(parametersJsonString)
// => {"registers":[{"phoneNumber":"0912033","mid":"406070","fullName":"ali"}]}
您可能正在打印可选字符串。因此终端将 JSON 字符串显示为子字符串,从而打印换行符。
我尝试将 json 放入字典中,然后使用 alamofire
将该字典发送到服务器我制作了 json 字符串,但是当我把它放入字典时
词典自动将“\”添加到我的json字符串中!
我该怎么办?
这是我的:
internal var registers : [ [String:String] ] = []
registers.append(["fullName" :"ali","mid" :"406070","phoneNumber":"0912033"])
let jsonData = try! JSONEncoder().encode(registers)
let jsonString = String(data: jsonData, encoding: .utf8)!
let regjson = jsonString
let parameters: [String: String] = [
"registers": regjson
]
结果是
["registers": "[{\"mid\":\"406070\",\"fullName\":\"ali\",\"phoneNumber\":\"0912033\"}]"]
应该是这样的
["registers": [{"fullName":"ali","mid":"406070","phoneNumber":"0912033"}]]
what should i do ?
没什么,反斜杠是虚的。添加它们是为了在文字字符串中显示双引号。
您正在使用字典,将其编码为 JSON 的字符串。这个过程工作正常。如果您查看 regjson
,您会发现它很好。自己看看:
let registers = [
["fullName" :"ali","mid" :"406070","phoneNumber":"0912033"]
]
let registersJsonData = try! JSONEncoder().encode(registers)
let registersJsonString = String(data: registersJsonData, encoding: .utf8)!
print(registersJsonString) // Looks just fine.
// => [{"mid":"406070","fullName":"ali","phoneNumber":"0912033"}]
但是您随后将这个 json 字符串放入另一个字典,然后将整个内容重新序列化为另一个 json 字符串。系统不知道键 "registers"
的字符串值已经是 JSON 序列化的字符串。它认为它是一个普通字符串,与 "Mary had a little lamb."
之类的东西没有什么不同。它像任何其他字符串一样序列化了这个字符串。这样做涉及转义出 JSON 语法中具有其他含义的符号。
系统运行正常,您只是要求它做一些您不想做的事情。
您可能正在寻找的是:
let registers = [
["fullName": "ali", "mid" :"406070", "phoneNumber": "0912033"]
]
let parameters = [
"registers": registers
]
let parametersJsonData = try! JSONEncoder().encode(parameters)
let parametersJsonString = String(data: parametersJsonData, encoding: .utf8)!
print(parametersJsonString)
// => {"registers":[{"phoneNumber":"0912033","mid":"406070","fullName":"ali"}]}
您可能正在打印可选字符串。因此终端将 JSON 字符串显示为子字符串,从而打印换行符。