为什么我的json返回零

时间:2018-06-11 10:38:10

标签: json swift

    let myUrl = URL(string: "http://app.avatejaratsaba1.com/api/Values/GetPriceList?paymentType=1&goodType=102")
    var request = URLRequest(url: myUrl!)
    request.httpMethod = "GET" // compose a query string
    request.addValue("application/json", forHTTPHeaderField: "content-type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")


    let task = URLSession.shared.dataTask(with: request)
    {
        (data : Data? , response : URLResponse? , error : Error?) in

        self.removeActivtyIndicator(activityIndicator: MyActivityIndicator)

        if error != nil
        {
            self.DisplayMessage(UserMessage: "2Could not successfully perform this request , please try again later.")
            print("error = \(String(describing : error))")

        }
        // let's convert response sent from a server side code to a NSDictionary object:

        do { let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
            if let parseJSON = json
            {

我在另一个viewcontroller中使用另一个url的确切代码,它正常工作!它在Postman中正常工作!!

我快速编码

更新::::

do {
            if let json = try JSONSerialization.jsonObject(with: data) as? [[String:Any]] {
                var goodNameArray = [String].self
                for i in 0..<json.count{
                    guard let goodName = json[i]["goodName"] as? String else{return}
                    Global.GlobalVariable.GoodName = goodNameArray.append(goodName)
                }
                print("GoodNames: \(goodNameArray)")
            }
        } catch let parseError {
            print("parsing error: \(parseError)")
            let responseString = String(data: data, encoding: .utf8)
            print("raw response: \(String(describing: responseString))")
        }
    }
    task.resume()

,它返回的错误是:

  

无法调用&#39;追加&#39;使用类型&#39;(字符串)&#39;

的参数列表

全局var代码:::::

class Global: UIViewController

{

struct GlobalVariable
{
    static var companyName = "Company"
    static var bigName = ((0) , (""))
    static var names  = ["Loading..." , ""]
////////////
    static var AgentInfo = "agentinfo"
////////////
    static var genaral_goodID = 000
    static var GoodName = [String]()
    static var PriceVariableName = "PriceVariableName"
    static var paymentType = "paymentType"
    static var fee = "fee"
    static var exipreDate = "exipreDate"
    static var expireTime = "expireTime"


}

}

已更新::::::

uitable

class secondtable : TableViewController
{

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

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return Global.GlobalVariable.names.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = UITableViewCell()
        let content = Global.GlobalVariable.GoodName[indexPath.row]
        cell.textLabel?.text = content
        //cell.accessoryType = .disclosureIndicator


        return cell

    }

} 在这段我的代码中,我应该使用&#34; goodName&#34;

来填充表格。

2 个答案:

答案 0 :(得分:3)

我以下面的方式测试,它对我有用。import * as firebase from 'Firebase'; public items: Array<any> = []; firebase.database().ref('favorite_locations/' + this.key).once('value').then(function(snapshot) { this.items = []; snapshot.forEach( itemSnap => { this.items.push(itemSnap.val()); return false; }); 中的回答。不要强行打开包装。

array of dictionaries

答案 1 :(得分:1)

通过阅读Codable协议,帮自己一个忙,节省一些时间。它将允许您通过基本上只定义您的结构生成一个相当不错的JSON解析器。如果出现问题,使用JSONDecoder.decode将为您提供更有价值的错误信息。

由于您的API目前仅使用您提供给我们的URL提供空数组,因此很难提出任何有意义的代码。您应该使用JSON的简单字符串表示形式,至少是一个向我们展示结构的最小化形式。这样你的问题就不会取决于可能相当复杂的网络服务的运作。