json - 如何在构建 JSON 字符串时转义特殊字符?

这是我的字符串

{
    'user': {
        'name': 'abc',
        'fx': {
            'message': {
                'color': 'red'
            },
            'user': {
                'color': 'blue'
            }
        }
    },
    'timestamp': '2013-10-04T08: 10: 41+0100',
    'message': 'I'mABC..',
    'nanotime': '19993363098581330'
}    

此处消息包含单引号,与JSON中使用的引号相同。我所做的是从用户输入(例如消息)中填充一个字符串。所以,我需要逃避那些破坏代码的特殊场景。但是除了字符串替换,还有什么方法可以让它们逃逸,但仍然允许 HTML 将它们处理回正确的消息?

最佳答案

对于一个关于基本主题的备受关注的问题,存在高度支持的错误信息,我感到震惊。

JSON 字符串不能用单引号引起来。各种版本的规范(Douglas Crockford 的 the original、the ECMA version 和 IETF version)都规定字符串必须用双引号引起来。这不是一个理论问题,也不是目前公认的答案所暗示的意见问题;如果您尝试让它解析单引号字符串,那么现实世界中的任何 JSON 解析器都会出错。

Crockford 和 ECMA 的版本甚至使用漂亮的图片来显示字符串的定义,这应该清楚地表明这一点:

漂亮的图片还列出了 JSON 字符串中的所有合法转义序列:

  • \"
  • \\
  • \/
  • \b
  • \f
  • \n
  • \r
  • \t
  • \u 后跟四位十​​六进制数字

请注意,与此处其他一些答案中的废话相反,\' 绝不是 JSON 字符串中的有效转义序列。不需要,因为 JSON 字符串总是双引号。

最后,当以编程方式生成 JSON 时,您通常不必考虑自己转义字符(当然,在手动编辑例如基于 JSON 的配置文件时,您会考虑)。相反,使用您的语言具有的任何 native 映射、数组、字符串、数字、 bool 值和空类型来形成您想要编码的数据结构,然后使用 JSON 编码函数将其编码为 JSON。这样的函数可能内置在您使用的任何语言中,例如 JavaScript 的 JSON.stringify。 , PHP 的 json_encode , 或 Python 的 json.dumps .如果您使用的语言没有内置此类功能,您可能会找到一个 JSON 解析和编码库来使用。如果您只是使用语言或库函数将事物与 JSON 进行转换,您甚至不需要知道 JSON 的转义规则。这是被误导的提问者应该做的。

https://stackoverflow.com/questions/19176024/

相关文章:

jquery - 如何使用 jQuery/JavaScript 解析 JSON 数据?

json - 如何使用 JSON 对象初始化 TypeScript 对象?

jquery - 如何在没有表单的情况下将字符串数组发布到 ASP.NET MVC Controll

python - NumPy 数组不是 JSON 可序列化的

python - JSON解码错误: Expecting value: line 1 column

json - 使用jq根据对象中变量的值选择对象

ruby - 'json' 原生 gem 需要安装构建工具

javascript - 将带有数字键的 JavaScript 对象转换为数组

python - 让 JSON 对象接受字节或让 urlopen 输出字符串

python - 将 JSON 字符串转换为字典未列出