代码之家  ›  专栏  ›  技术社区  ›  Bilal Şimşek

在swift中以嵌套json解析时无法识别的字符串

  •  -1
  • Bilal Şimşek  · 技术社区  · 8 年前

    我找不到任何解决方案来删除json数据中的一些信息,我想删除一些字符串,或者我需要对该字符串进行泛化,这样在解析时不会影响我的代码。为了清楚起见,我的示例代码是

    {
    "0xfc255":{
        "Eczane":"Nural",
        "Eczaci":"MEHMET AYDO\u011eAN",
        "Adres":"Haymana Yolu Caddesi No:86\/A Kar\u015f\u0131yaka",
        "Tarif":"",
        "Telefon":"3124841594",
        "Telefon2":null,
        "Lat":"39.801085082411184",
        "Lng":"32.79844880104065",
        "Sehir":"Ankara",
        "Ilce":"G\u00f6lba\u015f\u0131",
        "Mkk":"Kar\u015f\u0131yaka Mahallesi"
    },
    "0xfd9a6":{
        "Eczane":"Ta\u015fanlar",
        "Eczaci":"SAL\u0130H U\u011eUR TA\u015eANLAR",
        "Adres":"Atat\u00fcrk Mahallesi  Caddesi No:36\/C",
        "Tarif":"",
        "Telefon":"3122691661",
        "Telefon2":null,
        "Lat":"39.963343555855204",
        "Lng":"32.57991850376129",
        "Sehir":"Ankara",
        "Ilce":"Sincan",
        "Mkk":"Atat\u00fcrk Mahallesi"
    },}
    

    正如您所看到的,字典名称不一样,我想创建如下变量 let adress = json["0xfd9a6"]["Adres"] 以便我能利用信息。 我想学习如何摆脱 0xfd9a6 字符串并解析json数据中的其他变量。

    我的代码很简单

      override func viewDidLoad() {
        super.viewDidLoad()
    
        let html = sayfayiGetir(url: "https://......./nobetci-eczaneler.html?json=")
    
        let json = JSON(parseJSON: html)
        parse(json: json)
    
        let adress = json["0xfd9a6"]["Adres"]
    }
    

    解决了的

    最后我找到了使用swiftyjson的解决方案。下面是我找了一会儿的代码:

    func getJson(){
    
        guard let url = URL(string: "https://.........nobetci-eczaneler.html?json=") else {return}
    
        URLSession.shared.dataTask(with: url) { (data, response, err) in
            guard let data = data else {return}
            do{
    
                let json = try JSON(data: data)
                for (key,subJson):(String, JSON) in json {
                    // Do something you want
                    print(subJson["Eczane"])
                }
    
            }catch let jsonErr{
                print(jsonErr)
            }
        }.resume()
        }
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Duncan C    8 年前

    您发布的json包含字典。字典不能用作表视图的数据源,因为字典是无序的,表视图要求模型具有特定的顺序。

    您可以将您的结构映射到一个字典数组,但是您需要决定使用什么顺序以及如何处理外部字典的键。也许用外部字典中的键对内部字典进行排序?

    如果你有一个字典,而你想要一个外部字典的数组,你可以简单地映射到值,如larme的注释。但是,结果数组中的值顺序将未定义。

    我建议使用这样的代码:

    let sorted = json.map { $0 } //Map to an array of (key, value) tuples
        .sorted { $0.key < $1.key } //sort the array of tuples by key (the key)
        .map { $0.value } //map the tuples to an array of just the values