Swift 4 разбирает строку на объект json - PullRequest
0 голосов
/ 28 мая 2018

Я реализовал сканер кода qr, где в методе делегата «metadataOutput» я получил ответ с ключом наподобие «stringValue», значение этого ключа:

stringValue "'{" part_number ": "154100102232", "lot_number": "03S32401701344"} '"

Я хочу разобрать строковое значение для объекта json, но я не могу этого сделать.

let data = stringValue.data(using: .utf8)!
            do {
                if let json = try JSONSerialization.jsonObject(with: data, options : .allowFragments) as? [AnyHashable:Any]
                {

                    print("Json:::",json)
                    // post a notification
                   // NotificationCenter.default.post(name: NSNotification.Name(rawValue: "SCANNER_DATA"), object: nil, userInfo: json)

                } else {
                    print("bad json")
                }
            } catch let error as NSError {
                print(error)
            }

Я следовал вышеописанному подходу для разбора строки в json, но обнаружил следующую ошибку.

Ошибка домена = NSCocoaErrorDomain Code = 3840 "Недопустимое значение вокруг символа 0."UserInfo = {NSDebugDescription = Недопустимое значение для символа 0.}

Может кто-нибудь иметь представление об этом?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Лучше иметь расширение для String, подобное этому

 extension String{
    func toDictionary() -> NSDictionary {
        let blankDict : NSDictionary = [:]
        if let data = self.data(using: .utf8) {
            do {
                return try JSONSerialization.jsonObject(with: data, options: []) as! NSDictionary
            } catch {
                print(error.localizedDescription)
            }
        }
        return blankDict
    }
}

Используйте вот так

let dict = stringValue.toDcitionary()

Или вы можете использовать pod для всех этих видов работ из UtilityKit на github https://github.com/ervivek40/UtilityKit

0 голосов
/ 28 мая 2018

Это работает со мной, у вас строка ' символ в конце "' содержимое '"

   let  stringValue = """
{"part_number":"154100102232","lot_number":"03S32401701344"}
"""

    let data = stringValue.data(using: .utf8)!
    do {
        if let json = try JSONSerialization.jsonObject(with: data) as? [String:Any]
        {
             print("ewtyewytyetwytewytewtewytew",json)

        } else {
            print("ewtyewytyetwytewytewtewytew","bad json")
        }
    } catch let error as NSError {
        print("ewtyewytyetwytewytewtewytew",error)
    }
...