Преобразовать нижеупомянутую строку Json в словарь - PullRequest
0 голосов
/ 18 декабря 2018

Ниже упоминается моя строка JSON:

{
"StoreID": "ABC012",
"BillNo": "A000000001",
"Amount":  "1234.56",
"Auth": 96fc3411-dfa5-4df7-ada8-25b8a58ef1ea
}

Я использую приведенный ниже код для преобразования

func convertToDictionary(text: String) -> [String: Any]? {
    if let data = text.data(using: .utf8) {
        do {
            return try JSONSerialization.jsonObject(with: data, options: []) as? [String : Any]
        } catch {
            print(error.localizedDescription)
        }
    }
    return nil
}

Он возвращает ноль для вышеупомянутого случая, но работает нормальноfor:

{
"StoreID": "BC007",
"BillNo": "M170000351",
"Amount": 1818.96
}

Я не знаю, в чем дело, error.localizedDescription == Не удалось прочитать данные, поскольку они имеют неправильный формат.

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Вам нужно

1-

struct Root: Codable {
    let storeID, billNo, amount, auth: String

    enum CodingKeys: String, CodingKey {
        case storeID = "StoreID"
        case billNo = "BillNo"
        case amount = "Amount"
        case auth = "Auth"
    }
}

2-

{
    "StoreID": "ABC012",
    "BillNo": "A000000001",
    "Amount":  "1234.56",
    "Auth": "96fc3411-dfa5-4df7-ada8-25b8a58ef1ea"
}

3-

func convertToDictionary(text: String) -> Root? {
  return try? JSONDecoder().decode(Root.self, from: text.data(using:.utf8)!)
}
0 голосов
/ 18 декабря 2018

Значение 96fc3411-dfa5-4df7-ada8-25b8a58ef1ea из Auth ключ не заключен в двойные кавычки ("").Так что это недопустимый тип данных для формата json.

0 голосов
/ 18 декабря 2018

Ваш первый JSON недействителен.Вам нужно заключать строки в кавычки, а значение, присвоенное Auth, является строкой.

{
"StoreID": "ABC012",
"BillNo": "A000000001",
"Amount":  "1234.56",
"Auth": "96fc3411-dfa5-4df7-ada8-25b8a58ef1ea"
}

Если вы сомневаетесь, всегда следует подтверждать, что ваш JSON верен, это инструмент, который вы можете использовать для этого.

...