lua-cjson解码反斜杠错误

时间:2018-08-04 08:55:47

标签: lua

我对反斜杠有疑问。

local a = '{"hosts":[".*\\.?example(?:-bar)?.com"]}' local b = cjson.decode(a)

原始字符串为[[.*\.?example(?:-bar)?.com]]

它将出现Expected value but found invalid escape code at character 14错误。我试图替换\\,但不起作用。

如何解决此问题?谢谢。

1 个答案:

答案 0 :(得分:0)

Lua字符串文字'\\'描述了一个单字符字符串'\'

JSON字符串"\\"编码一个字符的字符串'\'

要手动编写JSON字符串,\将转义为\。

要将字符串写为Lua字符串文字,每个\都变成\。

因此,JSON的字符\是\,而Lua的结果是\\。

  

我不确定它是否会改变正则表达式的含义。

它不会改变含义,因为您应该发现实际字符串在解码后仅包含一个\。

但是,作为最佳实践,请勿手动编写JSON字符串。创建一个表,然后使用encode()函数将其序列化为JSON。这适用于任何语言。由于您在本示例中看到的原因,它很容易出错。

您的原始实现无效,因为您的字符串包含一个裸\,它不是有效的JSON。在JSON中,\总是跟在另一个\或\用来转义的少数事物之一,例如\ r或\ n。