首页 > 解决方案 > 使用字符替换制作有效的 JSON 字符串

问题描述

我正在用Swift 4.2编写一个iOS 应用程序

服务器使用无效字符响应质量差的 json。我必须替换一些字符以使其成为有效的 json 字符串,但我不能。

服务器响应字符串:

{\"fieldsets\":[{\"properties\":[{\"alias\":\"categories\",\"value\":\"Equity\"},{\"alias\":\ "subCategory\",\"value\":\"[\r\n \\"Banking\\",\r\n \\"FMCG\\",\r\n \\"基础设施\\", \r\n \\"国际基金\\",\r\n \\"大盘股\\",\r\n \\"大中盘股\\",\r\n \\"中盘股\\",\r\n \\"平衡基金\\",\r\n \\"Multi Cap\\",\r\n \\"其他\\",\r\n \\"医药\\",\r\n \\"税务筹划\\",\r\n \\"每日\\",\r\n \\"小盘\\",\r\n \\"中& Small Cap\\",\r\n \\"多元化\\"\r\n]\"},{\"别名\":\"icon\",\"value\":\"/media /1138/股权。png\"}],\"alias\":\"categoriesSubCategories\",\"disabled\":false,\"id\":\"170e1ba0-6f05-4a11-a2a6-04e108e7fa1f\",\"releaseDate\ ":null,\"expireDate\":null,\"allowedMemberGroups\":\"\"},{\"properties\":[{\"alias\":\"categories\",\"value\" :\"Balanced\"},{\"alias\":\"subCategory\",\"value\":\"[\r\n \\"Debt-Oriented Aggressive\\",\r\n \ \"Debt-Oriented Conservative\\",\r\n \\"信贷机会\\",\r\n \\"Equity Oriented\\",\r\n \\"资产配置\\",\ r\n \\"Others\\",\r\n \\"Yearly\\",\r\n \\"Advance\\"\r\n]\"},{\"别名\": \"图标\",\"值\":\"/media/1139/balanced.png\"}],\"alias\":\"categoriesSubCategories\",\"disabled\":false,\"id\":\"aabf640c-1ba4-4136-9dd0-79f3dfd6b79b \",\"releaseDate\":null,\"expireDate\":null,\"allowedMemberGroups\":\"\"},{\"properties\":[{\"alias\":\"categories\ ",\"value\":\"Tax Saver\"},{\"alias\":\"subCategory\",\"value\":\"[\r\n \\"Any\\"\ r\n]\"},{\"alias\":\"icon\",\"value\":\"/media/1140/tax-saver.png\"}],\"alias\": \"categoriesSubCategories\",\"disabled\":false,\"id\":\"fac9c316-16dc-48ab-bc0d-e8c22c02378f\",\"releaseDate\":null,\"expireDate\":null, \"allowedMemberGroups\":\"\"},{\"properties\":[{\"alias\":\"categories\",\"value\":\"Debt\"},{\"alias\" :\"subCategory\",\"value\":\"[\r\n \\"Liquid\\",\r\n \\"FMP\\",\r\n \\"Gilt Medium &长期\\",\r\n \\"金边短期\\",\r\n \\"收入\\",\r\n \\"其他\\",\r\n \\ "短期\\",\r\n \\"超短期\\",\r\n \\"中盘\\",\r\n \\"小盘\\",\r\ n \\"Floaters\\",\r\n \\"Gilt Fund\\",\r\n \\"动态债券\\"\r\n]\"},{\"别名\": \"icon\",\"value\":\"/media/1141/debt.png\"}],\"alias\":\"categoriesSubCategories\",\"disabled\":false,\"id\":\"ef1efeda-3334-4a9b-bda7-afff76474a40\",\"releaseDate\":null,\"expireDate\":null,\"allowedMemberGroups\":\"\"}] }

我正在尝试使用:

     let convertedStr = jsonStr.replacingOccurrences(of: "\\r\\n", with: "", options: .literal, range: nil)
   let convertedStr2 = convertedStr.replacingOccurrences(of: "\\", with: "", options: .literal, range: nil)
  let convertedStr3 = convertedStr2.replacingOccurrences(of: "\"[", with: "", options: .literal, range: nil)
 let convertedStr4 = convertedStr3.replacingOccurrences(of: "]\"", with: "", options: .literal, range: nil)

这行不通。

标签: iosjsonswift

解决方案


你的convertedStr3convertedStr4应该是这样的:

let convertedStr3 = convertedStr2.replacingOccurrences(of: "\"[", with: "[", options: .literal, range: nil)
let convertedStr4 = convertedStr3.replacingOccurrences(of: "]\"", with: "]", options: .literal, range: nil)

您的代码并没有完全起作用,因为您正在删除像json[]表示数组的字符。要修复它,请注意我添加了它们with: "[",并且with: "]",可以替换:

  • "[[convertStr3 中
  • ]"]convertStr4 中

尝试print(convertedStr4),您应该能够复制结果并检查它jsonlint.com以验证 json 格式是否正确。


推荐阅读