Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// 手动将JSON转换为有序的json字符串
- static private func orderedJsonString(json: [String: Any]) -> String {
- var orderString = "{"
- let sortedKeys = json.keys.sorted { (key1, key2) -> Bool in
- return key1.lowercased() < key2.lowercased() // 按照字母排序Key
- }
- for key in sortedKeys {
- let keyStr = "\"\(key)\""
- let value = json[key]
- if let str = value as? String { // 如果是字符串,则在value前后加上",并将\n替换为\\n,否则\n符号会被直接显示为空格,而后端需要
- orderString += (keyStr + ":" + "\"\(str)\"".replacingOccurrences(of: "\n", with: "\\n") + ",")
- } else if let arr = value as? NSArray { // 如果是数组
- // 如果数组里面是JSON,才排序,其他的用原顺序
- let orderArr = arr.sortedArray { (obj1, obj2) -> ComparisonResult in
- return .orderedDescending
- }
- if let strArr = arr as? [String] { // 字符串数组
- let orderStrArr = strArr.map { "\($0)" }
- orderString += (keyStr + ":" + "\(orderStrArr)".replacingOccurrences(of: " ", with: "") + ",") // 将空格去掉,去掉Swift传参时元素间自动添加的空格。可以进一步优化:自己去拼出来,因为目前会把内容中的空格也去掉
- } else if let dictArr = orderArr as? [[String: Any]] { // 如果是JSON,手动拼出来,详见arrayJsonString
- let arrJsonStr = arrayJsonString(arr: dictArr)
- orderString += (keyStr + ":" + arrJsonStr + ",")
- } else { // 其他类型,直接赋值
- orderString += (keyStr + ":" + "\(arr)" + ",")
- }
- } else if let dict = value as? [String: Any] { // 如果是JSON,则递归得出json字符串
- let jsonStr = orderedJsonString(json: dict)
- orderString += (keyStr + ":" + "\(jsonStr)" + ",")
- } else { // Int, Double等number类型 // if let num = value as? Int
- orderString += (keyStr + ":" + "\(value ?? 0)" + ",")
- }
- }
- orderString = orderString.subString(to: orderString.count - 1)
- orderString += "}"
- return orderString
- }
- /// 将JSON数组类型拼接为字符串,手动处理""和\\,防止使用上述方法出现的多“或多\的情况
- static private func arrayJsonString(arr: [[String: Any]]) -> String {
- var arrStr = "["
- for a in arr {
- let jsonStr = orderedJsonString(json: a)
- arrStr += (jsonStr + ",")
- }
- arrStr = arrStr.subString(to: arrStr.count - 1)
- arrStr += "]"
- return arrStr
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement