在Swift中创建一个JSON字符串

时间:2017-03-16 16:06:43

标签: ios json string serialization swift3

我将文本从TextView发送到我的后端。要包含换行符,我尝试将textView.text序列化为JSON。

let jsonObject: NSMutableDictionary = NSMutableDictionary()

    jsonObject.setValue(textView.text, forKey: "text")

    let jsonData: NSData

    do {
        jsonData = try JSONSerialization.data(withJSONObject: jsonObject, options: JSONSerialization.WritingOptions()) as NSData
        let jsonString = NSString(data: jsonData as Data, encoding: String.Encoding.utf8.rawValue) as! String
        print(jsonString)

    } catch _ {
        print ("JSON Failure")
    }

    }

但由于这是一个字典,因此生成的文本如下所示: {"文本":"测试\ nstack \ n \ noverflow"}

我实际上只需要:测试\ nstack \ n \ noverflow

是否有一种很好的方法可以在swift中转换多行String以获得这些" \ n"对于没有任何额外字符的换行符?

编辑:

我希望输入我的textView:enter image description here

结果得到字符串" hello \ n \ n"

源代码如下:

let text = textView.text
        let components = text?.components(separatedBy: CharacterSet.newlines).filter({!$0.isEmpty})
        let textWithLineFeeds = components?.joined(separator:"\n")

        print(textWithLineFeeds!)
        print(textView.text)

第一次印刷给出: 测试 你好 上面的换行

第二份印刷声明: 测试 喂

上面的换行

我希望我能看到: 测试\ nhello \ n \ nlinebreak above

1 个答案:

答案 0 :(得分:1)

要将带有任意换行符(CR,LF,CRLF等)的文本转换为不同的 - 只有LF - 换行符使用:

let text = "test\r\nstack\n\noverflow\rfoo"
let components = text.components(separatedBy: CharacterSet.newlines).filter({!$0.isEmpty})
let textWithLineFeeds = components.joined(separator:"\n")

如果服务器仅接受CR,请将\n更改为\r