json_decode返回" JSON_ERROR_SYNTAX",但JSON似乎没问题

时间:2016-05-16 07:35:56

标签: php json

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,stripslasheshtmlentities ...但没有成功。

为什么这个JSON格式不正确,以及如何使它成为可能?

2 个答案:

答案 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"