快速将数组转换为JSON字符串

2020/12/01 10:31 · ios ·  · 0评论

如何快速将数组转换为JSON字符串?基本上我有一个文本字段,其中嵌入了一个按钮。按下按钮后,文本字段文本将添加到中testArray此外,我想将此数组转换为JSON字符串。

这是我尝试过的:

func addButtonPressed() {
    if goalsTextField.text == "" {
        // Do nothing
    } else {
        testArray.append(goalsTextField.text)
        goalsTableView.reloadData()
        saveDatatoDictionary()
    }
}

func saveDatatoDictionary() {
    data = NSKeyedArchiver.archivedDataWithRootObject(testArray)
    newData = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions(), error: nil) as? NSData
    string = NSString(data: newData!, encoding: NSUTF8StringEncoding) 
    println(string)
}

我也想使用我的方法返回JSON字符串savetoDictionart()

就目前而言,您正在将其转换为数据,然后尝试将数据转换为JSON形式的对象(失​​败了,不是JSON),然后将其转换为字符串,基本上就是一堆毫无意义的转换。

只要数组仅包含JSON可编码的值(字符串,数字,字典,数组,nil),就可以使用NSJSONSerialization来实现。

相反,只需执行array-> data-> string部分:

迅捷3/4

let array = [ "one", "two" ]

func json(from object:Any) -> String? {
    guard let data = try? JSONSerialization.data(withJSONObject: object, options: []) else {
        return nil
    }
    return String(data: data, encoding: String.Encoding.utf8)
}

print("\(json(from:array as Any))")

原始答案

let array = [ "one", "two" ]
let data = NSJSONSerialization.dataWithJSONObject(array, options: nil, error: nil)
let string = NSString(data: data!, encoding: NSUTF8StringEncoding)

尽管您可能不应该使用强制展开,但是它为您提供了正确的起点。

Swift 3.0-4.0版本

do {

    //Convert to Data
    let jsonData = try JSONSerialization.data(withJSONObject: dictionaryOrArray, options: JSONSerialization.WritingOptions.prettyPrinted)

    //Convert back to string. Usually only do this for debugging
    if let JSONString = String(data: jsonData, encoding: String.Encoding.utf8) {
       print(JSONString)
    }

    //In production, you usually want to try and cast as the root data structure. Here we are casting as a dictionary. If the root object is an array cast as [Any].
    var json = try JSONSerialization.jsonObject(with: jsonData, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String: Any]


} catch {
    print(error.description)
}

JSONSerialization.WritingOptions.prettyPrinted如果要在调试器中将其打印出来,则选项会将其以易于阅读的格式提供给最终使用者。

参考:Apple文档

JSONSerialization.ReadingOptions.mutableContainers选项可让您更改返回的数组和/或字典。

所有ReadingOptions的参考:Apple文档

注意:Swift 4可以使用新协议对对象进行编码和解码。这是Apples文档,以及作为入门示例快速教程

如果您已经在使用SwiftyJSON:

https://github.com/SwiftyJSON/SwiftyJSON

你可以这样做:

// this works with dictionaries too
let paramsDictionary = [
    "title": "foo",
    "description": "bar"
]
let paramsArray = [ "one", "two" ]
let paramsJSON = JSON(paramsArray)
let paramsString = paramsJSON.rawString(encoding: NSUTF8StringEncoding, options: nil)

SWIFT 3更新

 let paramsJSON = JSON(paramsArray)
 let paramsString = paramsJSON.rawString(String.Encoding.utf8, options: JSONSerialization.WritingOptions.prettyPrinted)!

有利于传输的JSON字符串通常不会出现,因为您可以JSON编码HTTP正文。但是JSON字符串化的一种潜在用例是AlamoFire现在支持的Multipart Post。

如何在Swift 2.3中将数组转换为JSON字符串

var yourString : String = ""
do
{
    if let postData : NSData = try NSJSONSerialization.dataWithJSONObject(yourArray, options: NSJSONWritingOptions.PrettyPrinted)
    {
        yourString = NSString(data: postData, encoding: NSUTF8StringEncoding)! as String
    }
}
catch
{
    print(error)
}

现在,您可以将yourSting用作JSON字符串。

SWIFT 2.0

var tempJson : NSString = ""
do {
    let arrJson = try NSJSONSerialization.dataWithJSONObject(arrInvitationList, options: NSJSONWritingOptions.PrettyPrinted)
    let string = NSString(data: arrJson, encoding: NSUTF8StringEncoding)
    tempJson = string! as NSString
}catch let error as NSError{
    print(error.description)
}

注意:-要使用时,请使用tempJson变量。

extension Array where Element: Encodable {
    func asArrayDictionary() throws -> [[String: Any]] {
        var data: [[String: Any]] = []

        for element in self {
            data.append(try element.asDictionary())
        }
        return data
    }
}

extension Encodable {
        func asDictionary() throws -> [String: Any] {
            let data = try JSONEncoder().encode(self)
            guard let dictionary = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any] else {
                throw NSError()
            }
            return dictionary
        }
}

如果您在模型中使用Codable协议,则这些扩展可能对获取字典表示形式很有帮助(Swift 4

提示:要将包含JSON兼容对象的NSArray转换为包含JSON文档的NSData对象,请使用NSJSONSerialization的适当方法。JSONObjectWithData不是吗。

提示2:您很少希望将该数据作为字符串使用;仅用于调试目的。

对于Swift 3.0,您必须使用以下命令:

var postString = ""
    do {
        let data =  try JSONSerialization.data(withJSONObject: self.arrayNParcel, options: .prettyPrinted)
        let string1:String = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as! String

        postString = "arrayData=\(string1)&user_id=\(userId)&markupSrcReport=\(markup)"
    } catch {
        print(error.localizedDescription)
    }
    request.httpBody = postString.data(using: .utf8)

100%工作测试

对于Swift 4.2,该代码仍然可以正常工作

 var mnemonic: [String] =  ["abandon",   "amount",   "liar", "buyer"]
    var myJsonString = ""
    do {
        let data =  try JSONSerialization.data(withJSONObject:mnemonic, options: .prettyPrinted)
       myJsonString = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as! String
    } catch {
        print(error.localizedDescription)
    }
    return myJsonString

你可以试试看

func convertToJSONString(value: AnyObject) -> String? {
        if JSONSerialization.isValidJSONObject(value) {
            do{
                let data = try JSONSerialization.data(withJSONObject: value, options: [])
                if let string = NSString(data: data, encoding: String.Encoding.utf8.rawValue) {
                    return string as String
                }
            }catch{
            }
        }
        return nil
    }
本文地址:http://ios.askforanswer.com/kuaisujiangshuzuzhuanhuanweijsonzifuchuan.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!