【发布时间】:2021-10-08 07:14:30
【问题描述】:
我有问题的字符串是这样的:
'{\n"test":"AAAA",\n"test2":"BBB\n\n\nBBB"\n}'
我想通过 JSON.parse(jsonstring) 将其解析为 JSON 对象(Hash)
预期的结果是:
{ "test": "AAAA", "test2": "BBB\nB"}
但是,我得到了错误:
JSON::ParserError: 809
我碰巧知道jsonstring中的缩进代码会被转义, 所以我尝试了这个:
escaped_jsonstring = '{\n"test":"AAAA",\n"test2":"BBB\n\n\nBBB"\n}'.gsub(/\R/, '\\n')
JSON.parse(escaped_jsonstring)
我还有 JSON::ParserError。
键或值之外的缩进可能会导致此错误。
如何仅在 Ruby 中的键或值之外删除 \n(或 \r 任何缩进代码)?
这意味着,
'{\n"test":"AAAA",\n"test2":"BBB\n\n\nBBB"\n}'
↓
'{"test":"AAAA","test2":"BBB\n\n\nBBB"}'
【问题讨论】:
-
应用什么规则会导致
'"BBB\n\n\nBBB"'转换为"BBB\nB"。 -
感谢您的支持。删除缩进后,
"BBB\n\n\nBBB"仍应为“BBB\n\n\nBBB”。 -
那个“有问题的”字符串是从哪里来的?
-
谢谢。用户在 textarea 中输入带有缩进的 json 字符串。所以“有问题的”字符串来自用户的输入。通过从字符串中删除所有缩进,我可以检查它是否是有效的 json 结构。但我不希望 json 键值内有任何缩进或空格。
-
“检查它是否是一个有效的 json 结构”——好吧,它不是。 JSON 要求将字符串中的换行符转义为
\n。因此,在 JSON 字符串中包含未转义的换行符是无效的。这就是你得到错误的原因。与其尝试“修复”格式错误的 JSON,不如让用户粘贴有效的 JSON。
标签: ruby-on-rails json ruby