OGeek|极客世界-中国程序员成长平台

标题: ios - Swift 如何更新(修改、删除、添加)JSON 条目 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 17:52
标题: ios - Swift 如何更新(修改、删除、添加)JSON 条目

您好,我需要一些帮助,我正在制作一个 IOS 应用程序,它从 JSON API 获取数据,然后在表格上显示结果,当我点击表格中的结果时,它会转到第二个 View Controller 我正在展示细节。我想要做的是更新我在详细信息中显示的信息,通过从表本身中删除它们来从 JSON 中删除条目,并添加一个要保存在 JSON 上的新条目。

这是 JSON 结构:

      {
        _id: "57eec6c9dfc2fb03005c0dd0",
        ssid: "nonummy",
        password: "accumsan",
        lat: 29.39293,
        lon: 115.71771,
        summary: "curae nulla dapibus dolor vel est donec odio justo sollicitudin ut",
        __v: 0,
        likes: 1,
        unlikes: 0,
        bssid: "EF:CD:AB:56:34:12"
        },

我希望能够更新 SSID、密码和摘要。

这是我用来从 JSON 中获取结果的代码,并且运行良好

代码:

       let url = URL(string:"https://fierce-peak-97303.herokuapp.com/api/wifi")!

       let task = URLSession.shared.dataTask(with: url) { (data, response, error) in

        if error != nil {

            print(error)

        }else {

            if let urlContent = data {

                do {

                    let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: JSONSerialization.ReadingOptions.mutableContainers)

                //print(jsonResult))

                    for item in(jsonResult as? NSArray)! {

                        let ssid = (item as? NSDictionary)?["ssid"] as? NSString

                        //print(ssid)

                    }
                    self.tableData = jsonResult as! NSArray

                    DispatchQueue.main.sync(execute: {
                    self.table.reloadData()
                    })

                }catch {

                    print("No Json Result Was Found")
                }

            }

        }
    }

    task.resume()

例如,如果我单击表格的一行,我希望能够更新密码。



Best Answer-推荐答案


我设法做到了:所有格式都为 swift 3

       //declare parameter as a dictionary which contains string as key and  value combination.
    let parameters = ["ssid": newSSID.text!,"password": newPass.text!,"lat": newLat.text!,"lon": newLon.text!,"summary": newSum.text!] as Dictionary<String, String>

    //create the url with NSURL
    let url = URL(string: "https://fierce-peak-97303.herokuapp.com/api/wifi")

    //create the session object

    let session = URLSession.shared

    //now create the NSMutableRequest object using the url object

    let request = NSMutableURLRequest(url: url!)

    request.httpMethod = "OST"


    var err : NSError?
    do {
        request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: [])
    }catch{
        print("error")
    }

    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")

    //create dataTask using the session object to send data to the server

    let task = session.dataTask(with: request as URLRequest, completionHandler: {data, response, error -> Void in
        print("Response: \(response)")
        let strData = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
        print("Body: \(strData)")
        var err: NSError?
        do {
            var json = try JSONSerialization.jsonObject(with: data!, options: .mutableLeaves) as? NSDictionary

        }catch{

            print("JSON error")
        }

        // Did the JSONObjectWithData constructor return an error? If so, log the error to the console
        if(err != nil) {
            print(err!.localizedDescription)
            let jsonStr = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
            print("Error could not parse JSON: '\(jsonStr)'")
        }
        else {
            // The JSONObjectWithData constructor didn't return an error. But, we should still
            // check and make sure that json has a value using optional binding.

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

                if let parseJSON = json {
                    // Okay, the parsedJSON is here, let's get the value for 'success' out of it
                    let success = parseJSON["success"] as? Int
                    print("Success: \(success)")

                }
                else {
                    // Woa, okay the json object was nil, something went worng. Maybe the server isn't running?
                    let jsonStr = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
                    print("Error could not parse JSON: \(jsonStr)")
                }

            }catch{

                print("JSON error")


            }

        }

关于ios - Swift 如何更新(修改、删除、添加)JSON 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40094922/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://jike.in/) Powered by Discuz! X3.4