【问题标题】:Invalid JSON Escape Sequence in String字符串中的无效 JSON 转义序列
【发布时间】:2022-01-26 08:11:30
【问题描述】:

我正在使用一个为谷歌地图编码多边形的 MySQL 数据库。当我尝试将查询返回为 json 时,jsonlint 会抱怨。我不确定它为什么会抱怨,我确实尝试在 latlon 中转义“}”,但仍然得到相同的错误。

第 20 行的解析错误: ...“纬度”:“}ciuF|a|pNcUr@d@es@ ----------------------^ 期待 'STRING'、'NUMBER'、'NULL'、'TRUE'、'FALSE'、'{'、'['

我的json是:

{ “地图”:[ { "group_id": "0", "user_id": "113", “组的名字”: ””, “笔记”: ””, “field_id”:“”, "field_name": "西部牧场", “field_notes”:“”, “创建日期”:“2012 年 12 月 31 日”, “英亩”:“” } ], “多边形”:[ { "polygon_id": "", “field_id”:“1”, “英亩”:“92”, "latlon": "}ciuF|a|pNcUr@d@es@fIHXaNtCn@UxCjMlApAfFuBpI}E\ChJdEl@xAtE" } ] }

【问题讨论】:

  • 该错误表明 json 前面有问题,而不是在那一行..

标签: php string json


【解决方案1】:

问题是 C 前面有一个斜杠,它不是有效的转义序列。

"}ciuF|a|pNcUr@d@es@fIHXaNtCn@UxCjMlApAfFuBpI}E\ChJdEl@xAtE"

JSON.parse('"\\C"');

这会给你一个语法错误,因为它试图解析字符串\C。如果您想在属性值中使用文字 \,则需要对其进行转义。

"latlon": "}ciuF|a|pNcUr@d@es@fIHXaNtCn@UxCjMlApAfFuBpI}E\\ChJdEl@xAtE"

相关部分来自official grammar

string
    ""
    " chars "
chars
    char
    char chars
char
    any-Unicode-character-
        except-"-or-\-or-
        control-character
    \"
    \\
    \/
    \b
    \f
    \n
    \r
    \t
    \u four-hex-digits 

【讨论】:

  • 和我自己一起玩这个,我花了 3 个斜线让它在 php 中解码。 IE。 \\\C
  • 我通过使用:
    $tmp = str_replace('"', '\"', $maps['lat_lon']); $tmp = str_replace('\\', '\\\\', $tmp);
    我需要转义的其他特殊字符可能在 json 字符串中吗?
  • 您是连接自己的字符串还是使用json_encode
猜你喜欢
  • 2022-01-22
  • 1970-01-01
  • 2019-04-12
  • 2023-03-22
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多