将下面提到的Json字符串转换为字典

时间:2018-12-18 09:19:14

标签: json swift nsjsonserialization

下面提到的是我的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
}

对于上述情况,它返回nil,但在以下情况下工作正常:

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

我不知道怎么回事,error.localizedDescription ==无法读取数据,因为格式不正确。

3 个答案:

答案 0 :(得分:2)

您的第一个JSON无效。您需要将字符串用引号引起来,并且分配给Auth的值是一个字符串。

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

如果有疑问,应始终确认JSON有效,this是可用于此目的的工具。

答案 1 :(得分:1)

您需要

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

答案 2 :(得分:0)

96fc3411-dfa5-4df7-ada8-25b8a58ef1ea键的值Auth未被doubleqouted("")。因此,它不是json格式的有效数据类型。