ios - 使用字符替换制作有效的 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)
这行不通。
解决方案
你的convertedStr3
和convertedStr4
应该是这样的:
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 格式是否正确。
推荐阅读
- jquery - 在codeigniter 4中对提交事件进行ajax调用时得到403禁止
- node.js - 为什么 process.stdout.on('data' 在我按下回车键 (node.js) 之前不会触发?
- javascript - 如何从用户那里获取输入并将其显示在屏幕上,当他分享 url 时,获得 url 的人可以看到该输入
- wcf - 在 WCF 中遇到最大邮件大小配额
- python - 使用列值+python中这些值的别名来命名excel文件
- tableau-api - 在 tableau 中,我想创建一个基于过滤器的计算字段,并输出也基于过滤器的答案
- reactjs - 从地理服务器获取数据时出现错误语法错误:JSON.parse
- r - 在分组、汇总和评估 TRUE 条件后改变新列
- spring-boot - Cassandra + SpringBoot,java.lang.ClassNotFoundException:com.datastax.oss.protocol.internal.SegmentCodec
- python - 解包 f 字符串中没有“'”的综合列表