在 Swift 中创建 JSON 字符串
Posted
技术标签:
【中文标题】在 Swift 中创建 JSON 字符串【英文标题】:Create a JSON String in Swift 【发布时间】:2017-03-16 16:06:43 【问题描述】:我将文本从 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")
但由于这是一个字典,因此生成的文本如下所示: "text":"test\nstack\n\noverflow"
我实际上只需要:test\nstack\n\noverflow
有没有一种漂亮的方法可以快速转换多行字符串以使这些“\n”用于换行符而无需任何额外字符?
编辑:
我希望在我的 textView 中输入如下内容:
结果得到字符串“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)
第一个打印给出: 测试 你好 上面的换行符
第二个打印语句: 测试 你好
上面的换行符
我希望我能看到: 测试\n你好\n\n上面的换行符
【问题讨论】:
为什么不在后端反序列化 JSON 并从 "text" 键中获取文本值? :) 不是我的后端,只是我必须开发的后端。我可以使用 textview.text.debugdescription 并修剪第一个和最后一个字符,但我不想使用 hacky 解决方案。 我不明白。后端不理解 JSON,因为您正在发送 JSON?如果后端不理解 JSON,只需发送一个字符串而不是 JSON...请解释一下,我没有理解您为什么不能发送您的 JSON 对象。 如果你只想发送字符串,为什么要序列化字符串呢?单个 JSON 字符串等于标准字符串。但是,建议使用数组或字典作为根对象发送 JSON。并且从不在 Swift 中使用NSMutableArray / NSMutableDictionary
我向后端发送一个带有以下标头的 json,让 headers2: HTTPHeaders = [ "sid": sid, "receiver": guid, "message": message, "latestmessage": "0 " ],如果消息字符串包含换行符,它不会接受它。它需要 \n 来处理换行符。这就是为什么我试图通过 json 序列化来实现这一点。我只想用 \n 填充换行符并避免任何额外的字符。
【参考方案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
。
【讨论】:
您的答案将“test\r\nstack\n\noverflow\rfoo”转换为测试堆栈溢出,但我需要它完全相反的方式。 代码将任意换行符替换为\n
。我不明白您的问题中的 line break 是什么。请添加来源和预期结果。
我编辑了问题以澄清我在寻找什么。
@JochenÖsterreicher 对不起,Jochen,来源只是一个截图。它没有显示如何处理换行符。请从文本视图/标签中获取文本并打印。
let str = textView.text.debugDescription let start = str.index(str.startIndex, offsetBy: 1) let end = str.index(str.endIndex, offsetBy: -1) let range = start..以上是关于在 Swift 中创建 JSON 字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何从模型数据 Swift 创建 JSON 字符串? [关闭]
在 Swift-Json 中创建 NSMutableDictionary