【问题标题】:lua-cjson decode backslash errorlua-cjson 解码反斜杠错误
【发布时间】:2018-08-05 20:15:46
【问题描述】:

我有一个关于反斜杠的问题。

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

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

它会得到Expected value but found invalid escape code at character 14 错误。我尝试替换\\,但它不起作用。

我该如何解决这个问题?谢谢。

【问题讨论】:

  • a 不是 JSON 对象——它是一个表。 JSON 对象始终是字符串。
  • @Michael-sqlbot 对不起,这是一个错误。我更新了。
  • \\\\怎么样?
  • @Michael-sqlbot 遗憾的是,这行不通。我不确定这个问题是否与thisthis 相关,
  • @Michael-sqlbot 如果字符串是'.*\\\\.?example(?:-bar)?.com]',它可以工作。我不确定它是否会改变正则表达式的含义。

标签: lua


【解决方案1】:

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

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

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

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

所以 JSON 的字符 \ 是 \,而 Lua 的结果是 \\.

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

并没有改变意思,因为你应该发现实际字符串在解码后只包含一个\。

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

您的原始实现无效,因为您的字符串包含一个裸露的 \,它不是有效的 JSON。在 JSON 中,\ 后面总是跟着另一个 \ 或 \ 用于转义的少数几个东西之一,例如 \r 或 \n。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-01
    • 2017-01-12
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多