2016-01-14 139 views
0

json_decode('["foo","bar"]', true),這個工程,但這個返回NULL,json_decode("['foo','bar']", true)json_last_error()輸出4,JSON_ERROR_SYNTAXjson_decode返回null與不同的qoute

我檢查了以下問題的一些答案;

json_decode() returns null issues

PHP json_decode() returns NULL with valid JSON?

json_decode returns NULL after webservice call

,並試圖以下解決方案,但沒有成功;

json_decode(str_replace('"', '"', "['foo','bar']"), true)

json_decode(stripslashes(str_replace('\"', '"', "['foo','bar']")), true)

json_decode(stripslashes("['foo','bar']"), true)

json_decode(utf8_encode("['foo','bar']"), true)

我不認爲它與UTF-8 BOM做。它是一個PHP的錯誤?或者我該如何將"['foo','bar']"轉換爲'["foo","bar"]'作爲解決方法?

+1

的字符串的功能'json_decode'作爲一個參數需要是有效的JSON。 '{「a」:1,「b」:2,「c」:3,「d」:4,「e」:5}'這是有效的JSON。你只是傳入一個用引號括起來的數組。 – sidneydobber

回答

0

JSON字符串用雙引號引用"。單引號'(這在PHP中很常見)不是有效的JSON。沒有討論。因此,輸入['foo','bar']是無效的JSON和json_decode正確地拒絕解析它

另請參閱ECMA-404,它定義了JSON格式:

字符串是的包裹引號(U + 0022)Unicode代碼點的序列。

如果你正在尋找的東西到你的JSON上下的字符串(它從何從修復無效JSON的來源,最好是?)轉換爲有效的JSON; str_replace('\'', '"', $jsonInput)應該在簡單情況下工作。


U+0022是雙引號"

0

你沒有提供有效的json函數。如果你使用javascript數組

 ["foo","bar"]
你應該使用JSON.stringify在js端實際上生成JSON。