使用 swiftyJSON 在 Swift 2.0 中解析 JSON 时获取空值

Posted

技术标签:

【中文标题】使用 swiftyJSON 在 Swift 2.0 中解析 JSON 时获取空值【英文标题】:Getting a null value when parsing JSON in Swift 2.0 with swiftyJSON 【发布时间】:2015-11-06 19:15:33 【问题描述】:

当我尝试从 url 解析 json 时,我得到一个空值。我缺少什么,或者 应该 实现什么来简单地加载一个 json 值并将其放入 UICollectionView 中?

这是我从网络服务获得的 json。我已经用验证工具验证了它是正确的:


    "status": 1,
    "count": 72,
    "data": [
        
            "id": 818,
            "name": "1. product",
            "price": "155.00"
        ,
        
            "id": 812,
            "name": "2. product",
            "price": "62.00"
        ,
       
            "id": 26,
            "name": "3. product",
            "price": "213.00"
        ,
       
            "id": 657,
            "name": "4. product",
            "price": "21.00"
        ,
       
            "id": 347,
            "name": "5. product",
            "price": "57.00"
        

我需要从上面的 json 中获取名称和价格值。

这是 viewDidLoad 中调用的 swiftyJSON 代码块。我怀疑问题出在这里,但我不确定。

let json = JSON(data: products)
if let productName = json["data"][0]["name"].string 
    print("Product: \(productName)")

【问题讨论】:

您的代码打印什么?您能否详细说明您在哪里获得products?如果打印productsjson["data"] 会发生什么? 它不打印任何东西,因为以 "print("Product..." 开头的代码从未调用过。 在您的示例中products 是什么类型?你能多介绍一下如何从网络获取 json 的代码吗? 没错,下面是DataManager中的sn-p代码; let productsURL = url class DataManager class func getProductsFromWebservice(success: ((productsData: NSData!) -> Void)) //1 loadDataFromURL(NSURL(string: productsURL)!, 完成: (data, error) -> Void in //2 if let urlData = data //3 success(productsData: urlData) ) 【参考方案1】:

您可以通过覆盖模型类中的 init 函数来避免 JSON 中的空字段。 当然取决于您的映射数据。如果您将获得 JSON null 对象,此构造函数将简单地将 null 替换为默认值

例如:

override init() 
   mapField1 = "" // string value
   mapField2 = 0 // number value

关于你的代码。您在 JSON 中将 0 键放在哪里?只有json["data.name"]json["data.price"]

【讨论】:

是的,我在模型类上初始化了默认值。我可能会被 [0] 放在错误的地方,因为我猜我从 Web 服务获得的 json 是字典数组,我不擅长它。

以上是关于使用 swiftyJSON 在 Swift 2.0 中解析 JSON 时获取空值的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 奇怪的 JSON 前缀 - Swift 2.0

Swift:如何使用 cocoapods 安装 SwiftyJson?

Swift 2 + SwiftyJSON:使用未解决的标识符错误

在 swift 4.0 中使用 Alamofire/SwiftyJSON 时出错

如何使用 SwiftyJSON 在 Swift 中解析这个 JSON 对象?

Swift:在 tableView 中过滤 SwiftyJSON 数据