【问题标题】:Could not cast value of type '__NSCFBoolean' (0x100b123b8) to 'NSString' (0x100f0ab48)无法将“__NSCFBoolean”(0x100b123b8)类型的值转换为“NSString”(0x100f0ab48)
【发布时间】:2016-07-30 19:20:17
【问题描述】:

我正在尝试解析一个 .json 文件,但我以为我快结束了,发生了错误:

无法将“__NSCFBoolean”(0x10c8ba3b8) 类型的值转换为“NSString”(0x10ccb2b48)。

我已经完成了我的研究,我发现(惊讶地)我的 .json 中有一些布尔值在字符串的舞台上乱七八糟...

那么我该如何避免这种情况呢?在尝试将 bar["tags"] 放入 String 之前,我已经查找了一些方法可以给我 bar["tags"] 的类型,但我找不到..

这是 .json 和我的(太长的)代码的摘录:

...{
    "id": 3906,
    "address": "L\u2019Hotel le 123 Sebastopol 23, boulevard S\u00e9bastopol, Paris, 75002, Le Louvre, Paris",
    "name": "123 Sebastopol",
    "url": "/bar/paris/le-louvre/123-sebastopol",
    "image_url": "https://prh-wbb-prod.s3.amazonaws.com/generic_640_480/WBB%20holding%20image3_54abcf7d218d1_55b8d2128eabb.jpg",
    "tags": "Hotel, Cocktail, Terrace",
    "latitude": 48.867598851356,
    "longitude": 2.3533117460327
}, {
    "id": 1523,
    "address": "73 Rue d\u0027Aboukir, 75002 Paris, France, Le Louvre, Paris",
    "name": "Lockwood",
    "url": "/bar/paris/le-louvre/lockwood",
    "image_url": "https://prh-wbb-prod.s3.amazonaws.com/bar_640_480/lockwood_001_553f5b2c99f4b.jpg",
    "tags": false,
    "latitude": 48.867716087563,
    "longitude": 2.3469846706722
}...

我的代码:

id = (bar["id"] as? Int)!
name = (bar["name"] as? String)!
adress = (bar["address"] as? String)!
url = (bar["url"] as? String)!
image_url = (bar["image_url"] as? String)!

tags = (bar["tags"] as? String)!

latitude = (bar["latitude"] as? Double)!
longitude = (bar["longitude"] as? Double)!

【问题讨论】:

  • 在您的 JSON "tags": false, 中。这是导致错误的原因。
  • 您的第一个存根将 tags 显示为字符串,第二个存根将其显示为布尔值。这就是错误的原因。
  • 这一行会引发错误 tags = (bar["tags"] as?String)! “标签”应该是一个字符串(200/208)所以我只想用一个空字符串替换 false

标签: ios json string swift boolean


【解决方案1】:

嗯,好像我没有做足够的研究!

解决办法如下:

if let test = bar["tags"] as? String {
    tags = (bar["tags"] as? String)!
}else{
    tags=" "
}

【讨论】:

    【解决方案2】:

    您正在尝试将 Bool 值 - false - 解析为 String 的实例。

    将您的代码更改为:

    id = (bar["id"] as? Int)!
    name = (bar["name"] as? String)!
    adress = (bar["address"] as? String)!
    url = (bar["url"] as? String)!
    image_url = (bar["image_url"] as? String)!
    
    tags = (bar["tags"] as? Bool)!
    
    latitude = (bar["latitude"] as? Double)!
    longitude = (bar["longitude"] as? Double)!
    

    【讨论】:

      【解决方案3】:

      当我决定在 Swift3 下解析 JSON 并且没想到结果是 Bool 时,我遇到了类似的问题。

      这是我的代码,希望它能帮助像我这样不喜欢 Swift 3 的人。

      在我的情况下,JSON 输出中的条目是

      success = 0;
      

      注意它没有 "" 围绕 success 或 0 像这样

      "success" = "0"
      

      这是我用来从 JSON 输出中获取 Bool 值的代码

      success = 0
      

      注意没有“”

      let jsonResult = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
      if (jsonResult?["success"] as? Bool)!
       {
            okToLogIn = true
            print(okToLogIn)
       }
       else
       {
             okToLogIn = false
             print(okToLogIn)
       }
      

      所以我只是将它保留为 Bool 并检查真假,我的代码现在可以正常工作了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-03
        • 2019-01-10
        • 2016-06-06
        • 1970-01-01
        • 2021-10-02
        • 2017-09-26
        • 1970-01-01
        • 2021-03-08
        相关资源
        最近更新 更多