словарь, автоматически добавляющий backsla sh \ в swift - PullRequest
0 голосов
/ 14 апреля 2020

я пытаюсь поместить json в словарь, чтобы отправить этот словарь на сервер, используя alamofire

, я делаю json строку, но когда я помещаю ее в словарь

словарь автоматически добавьте "\" к моей jsonstring!

что мне делать?

вот мой:



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"}]]

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Вы берете словарь, кодируя его в строку 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"}]}
1 голос
/ 14 апреля 2020

что мне делать?

Ничего, обратные слэши являются виртуальными. Они добавлены для отображения двойных кавычек в буквальной строке.

...