这可能是一个奇怪的问题,因为它特定于JSON字符串本身,而不是它们所表示的对象。给定一个“漂亮打印” JSON字符串(表示 any JSON可编码模型),如何将其重新格式化为“紧凑”格式?
我的第一个想法是不考虑JSON,而只是考虑字符串,然后使用RegEx删除重复的空格,删除换行符等,但这不是上下文感知的,因此可能会影响JSON的键和值部分如果您未正确测试自己是否在引号内。
我的下一个想法是尝试从JSON构造一个对象,但是没有类型可以转换为该对象,我不确定如何在不手动将值解析为'ANY'的情况下进行操作,然后测试它们是否为数组,然后递归到数组中,重复该过程。然后,一旦有了最后一个对象,就以紧凑形式序列化结果。但是,这似乎有些矫kill过正。
是否有更简单的方法来完成此操作?如果有帮助,我们正在使用Swift 4。
答案 0 :(得分:0)
更新:
正如@Mark A. Donohoe 所指出的,这会删除所有空格。所以即使它看起来很酷,但这是一个愚蠢的答案。不要上当。
我需要同样的东西,我最终创建了一个字符串扩展:
extension String {
func toCompactJSON() -> String {
self.filter { !$0.isWhitespace && !$0.isNewline }
}
}
在我的情况下,虽然它是用于测试目的,但结果证明它是无用的,因为 Javascript 对象/数组出现的顺序与通过 JSONEncoder
生成的顺序不同。