Advertisement
Guest User

Untitled

a guest
Jul 16th, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. /// 手动将JSON转换为有序的json字符串
  2. static private func orderedJsonString(json: [String: Any]) -> String {
  3. var orderString = "{"
  4. let sortedKeys = json.keys.sorted { (key1, key2) -> Bool in
  5. return key1.lowercased() < key2.lowercased() // 按照字母排序Key
  6. }
  7. for key in sortedKeys {
  8. let keyStr = "\"\(key)\""
  9. let value = json[key]
  10. if let str = value as? String { // 如果是字符串,则在value前后加上",并将\n替换为\\n,否则\n符号会被直接显示为空格,而后端需要
  11. orderString += (keyStr + ":" + "\"\(str)\"".replacingOccurrences(of: "\n", with: "\\n") + ",")
  12. } else if let arr = value as? NSArray { // 如果是数组
  13. // 如果数组里面是JSON,才排序,其他的用原顺序
  14. let orderArr = arr.sortedArray { (obj1, obj2) -> ComparisonResult in
  15. return .orderedDescending
  16. }
  17. if let strArr = arr as? [String] { // 字符串数组
  18. let orderStrArr = strArr.map { "\($0)" }
  19. orderString += (keyStr + ":" + "\(orderStrArr)".replacingOccurrences(of: " ", with: "") + ",") // 将空格去掉,去掉Swift传参时元素间自动添加的空格。可以进一步优化:自己去拼出来,因为目前会把内容中的空格也去掉
  20. } else if let dictArr = orderArr as? [[String: Any]] { // 如果是JSON,手动拼出来,详见arrayJsonString
  21. let arrJsonStr = arrayJsonString(arr: dictArr)
  22. orderString += (keyStr + ":" + arrJsonStr + ",")
  23. } else { // 其他类型,直接赋值
  24. orderString += (keyStr + ":" + "\(arr)" + ",")
  25. }
  26. } else if let dict = value as? [String: Any] { // 如果是JSON,则递归得出json字符串
  27. let jsonStr = orderedJsonString(json: dict)
  28. orderString += (keyStr + ":" + "\(jsonStr)" + ",")
  29. } else { // Int, Double等number类型 // if let num = value as? Int
  30. orderString += (keyStr + ":" + "\(value ?? 0)" + ",")
  31. }
  32. }
  33. orderString = orderString.subString(to: orderString.count - 1)
  34. orderString += "}"
  35.  
  36. return orderString
  37. }
  38.  
  39. /// 将JSON数组类型拼接为字符串,手动处理""和\\,防止使用上述方法出现的多“或多\的情况
  40. static private func arrayJsonString(arr: [[String: Any]]) -> String {
  41. var arrStr = "["
  42. for a in arr {
  43. let jsonStr = orderedJsonString(json: a)
  44. arrStr += (jsonStr + ",")
  45. }
  46. arrStr = arrStr.subString(to: arrStr.count - 1)
  47. arrStr += "]"
  48. return arrStr
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement