在Swift中解析JSON时为nil

塔尔沃·梅塞普

我正在做一些简单的项目来学习新事物。我开始解析JSONSwiftyJSON我正在尝试向显示一些JSON数据,tableView但是现在我被卡住了。我不知道零在哪里,为什么在哪里。你能帮我吗?在给定的代码中,我试图获取"Brands"并将其显示在内部tableView或至少将其打印到中console

这是.json我拥有文件:

{
    "Snuses": {
        "Brands":{


            "CATCH": [
                      {"Products":"white", "nicotine":"8.0"},
                      {"Products":"yellow", "nicotine":"8.0"}
                      ],
            "GENERAL": [
                        {"Products":"brown", "nicotine":"8.0"},
                        {"Products":"white", "nicotine":"8.0"}
                        ]
        }
    }
}

在这里,我尝试获取如下信息:

var numberOfRows = 0

var snusBrandsArray = [String]()

override func viewDidLoad() {
    super.viewDidLoad()
    parseJSON()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}

func parseJSON(){
    let path: String = NSBundle.mainBundle().pathForResource("snuses", ofType: "json") as String!
    let jsonData = NSData(contentsOfFile: path) as NSData!
    let readableJSON = JSON(data: jsonData, options: NSJSONReadingOptions.MutableContainers, error: nil)

    var brands = readableJSON["Snuses", "Brands"]

    NSLog("\(brands)")

    numberOfRows = readableJSON["Snuses"].count

    for i in 1...numberOfRows{
        var brands = "Snuses"
        brands += "\(i)"
        var name = readableJSON["Snuses", "Brands"].string as String!
        snusBrandsArray.append(name)
    }
}
戴维·S。

像这样简单的事情呢?下面是Playground代码,但解析是相同的。

//: Playground

import UIKit
import Foundation

var jsonStr = "{ \"Snuses\": { \"Brands\":{ \"CATCH\": [ {\"Products\":\"white\", \"nicotine\":\"8.0\"}, {\"Products\":\"yellow\", \"nicotine\":\"8.0\"} ], \"GENERAL\": [ {\"Products\":\"brown\", \"nicotine\":\"8.0\"}, {\"Products\":\"white\", \"nicotine\":\"8.0\"} ] } } }"

func parseJSON(jsonStr:String) throws -> [AnyObject]? {

    var brandNameKeys:[AnyObject]?
    let jsonData = jsonStr.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

    let json = try NSJSONSerialization.JSONObjectWithData(jsonData!, options: NSJSONReadingOptions())

    if let brandNameDict = json["Snuses"]!?["Brands"] as? NSDictionary
    {
        brandNameKeys = brandNameDict.allKeys
    }

   return brandNameKeys
}

if let result = try parseJSON(jsonStr)
{
    print(result)
}

在我的游乐场中["CATCH", "GENERAL"],我认为这是您想要的输出

这是完整的UITableViewController,它演示了正在使用的解决方案:

import UIKit

class TableViewController: UITableViewController {

    var data:[AnyObject]?

    override func viewDidLoad() {
        super.viewDidLoad()

        if let path: String = NSBundle.mainBundle().pathForResource("Data", ofType: "json")
        {
            do
            {
                let jsonStr = try String(contentsOfFile: path)
                data = try parseJSONStr(jsonStr)
            }
            catch _ {
                print("Loading json failed")
            }
        }
    }


    // JSON Parsing
    func parseJSONStr(jsonStr:String) throws -> [AnyObject]? {

        var brandNameKeys:[AnyObject]?
        let jsonData = jsonStr.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

        let json = try NSJSONSerialization.JSONObjectWithData(jsonData!, options: NSJSONReadingOptions())

        if let brandNameDict = json["Snuses"]!?["Brands"] as? NSDictionary
        {
            brandNameKeys = brandNameDict.allKeys
        }

        return brandNameKeys
    }

    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if let data = data
        {
            return data.count
        }
        else
        {
            return 0
        }
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("SampleCell", forIndexPath: indexPath)

        if let rowData = data![indexPath.row] as? String
        {
             cell.textLabel?.text = rowData
        }

        return cell
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

致命错误:在尝试解析JSON时在Swift中展开Optional值时意外发现nil

来自分类Dev

在 Swift4 中从 JSON 解析填充模态时发现 nil

来自分类Dev

在 Swift 3 中解析 JSON 时出错

来自分类Dev

将Json数组中的对象解析为字典Swift

来自分类Dev

在Swift Issue中为iOS应用解析JSON

来自分类Dev

在Swift 3中将JSON对象解析为NSArray

来自分类Dev

将 Swift 中的 JSON 解析为类数组

来自分类Dev

在Swift中解析Json

来自分类Dev

在SWIFT中解析JSON

来自分类Dev

当我在STDIN中输入长字符串时,Swift的readLine()为nil

来自分类Dev

当我在STDIN中输入长字符串时,Swift的readLine()为nil

来自分类Dev

在Swift中检查Optional是否为nil

来自分类Dev

RestKit:在Swift中映射类为nil

来自分类Dev

在Swift中objectForKey为NSUserDefaults返回nil

来自分类Dev

RestKit:在Swift中映射类为nil

来自分类Dev

在 Swift 中为 NSString 处理 nil 值

来自分类Dev

迅速在Json解析中解开Optional值时意外发现nil

来自分类Dev

当我尝试使用json从Web服务中获取数据时,data参数为nil

来自分类Dev

在Swift中解包可选时发现nil

来自分类Dev

将alamofire响应解析为JSON返回nil

来自分类Dev

在Swift中将JSON解析为Realm数据库时,如何防止Realm覆盖自身?

来自分类Dev

在将JSON解析为Swift时消除了quicktype辅助方法

来自分类Dev

将JSON数组解析为Swift数组

来自分类Dev

将JSON(日期)解析为Swift

来自分类Dev

Swift 4 以变量为关键解析 json

来自分类Dev

Swift 3中的JSON解析

来自分类Dev

在Swift中解析JSON数组

来自分类Dev

在Swift中从OpenWeatherMap解析JSON

来自分类Dev

将String解析为JSON时出错