PHP中的这个JSON字符串有什么问题?
[{"Type":"Chasse|Loisirs","Productions":"Bois d\'Œuvre|Bois de chauffage","Essences principales > Feuillus":"Bouleaux|Hêtres|Merisiers|Peupliers"}]
我尝试使用this one之类的在线工具验证器,而JSON似乎有效,但使用PHP我仍然有错误:
$result = json_decode($json)
// JSON_ERROR_SYNTAX
我尝试删除UTF-8 BOM,stripslashes
,htmlentities
...但没有成功。
为什么这个JSON格式不正确,以及如何使它成为可能?
答案 0 :(得分:4)
JSON无效,因为您不需要转义'
个字符。例如,检查此问题How to escape special characters in building a JSON string?
JSON RFC 7159有此部分
char = unescaped /
escape (
%x22 / ; " quotation mark U+0022
%x5C / ; \ reverse solidus U+005C
%x2F / ; / solidus U+002F
%x62 / ; b backspace U+0008
%x66 / ; f form feed U+000C
%x6E / ; n line feed U+000A
%x72 / ; r carriage return U+000D
%x74 / ; t tab U+0009
%x75 4HEXDIG ) ; uXXXX U+XXXX
'
不在列表中。
我对与转义Unicode字符相关的问题进行了很多更改。在形式上,这不是必需的。例如,检查此问题JSON and escaping characters
答案 1 :(得分:0)
Victor Smirnov已经在上面给出了一个很好的答案,但是我想解释一下如何调试这样的错误:
如果您在http://jsonlint.com/中输入JSON,则会显示以下内容:
Error: Parse error on line 3:
...s", "Productions": "Bois d\'Œuvre|Bois
----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined'
这并不会立即显示出错误的原因,但它确实显示字符串出现了问题
"Bois d\'Œuvre|Bois de chauffage"
通过逐字符替换或删除字符串,您可以发现单引号不应被转义。
所以它应该是:
"Bois d'Œuvre|Bois de chauffage"