8

受信している特定の文字列で json_decode を機能させるのに問題があります。

私はそれをこの行に絞り込みました:

"systemNotes[6]": "2013 年 1 月 9 日午後 12 時 52 分 - テスト名 - 請求先住所 2 を配送先住所 2 に変更 名: 配送先 姓: メールアドレス: 配送先住所: 配送先住所 2: 配送先の市: 配送先の郵便番号/郵便番号: Shipping Country: Shipping State: Phone: Billing First Name: Billing Last Name: Billing Address: Billing Address 2: Billing C"

この質問からjsonをコピーすると、問題は再現できません-しかし、元のjsonの代表的なスニペットはここにあります: http ://codepad.org/ZzrC7rqQ-そしてそれをjsonlint.comに入れると:

Parse error on line 3:
...  "systemNotes[6]": "January 09, 2013 12
-----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['

無効な json であるようなこの文字列の何が問題になっていますか?

編集

正確なコードが出くわすことができました。

"systemNotes[6]":"January+09%2C+2013+12%3A52+PM+-+First+Name+-+Changed++Billing+Address+2+From++to+Shipping+First+Name%3A% 09+Shipping+Last+Name%3A%09+Email+Address%3A%09+Shipping+Address%3A+%09+Shipping+Address+2%3A+%09+Shipping+City%3A+%09+Shipping+Zip% 2FPostal%3A+%09+Shipping+Country%3A+%09+Shipping+State%3A+%09+Phone%3A+%09+Billing+First+Name%3A+%09+Billing+Last+Name%3A+%09+Billing+ Address%3A+%09+Billing+Address+2%3A+%09+Billing+C"

これは問題ないように見えるので、parse_str を実行するときに問題が発生している可能性があります。使用しているコードは次のとおりです。

$response = apiConnection($data);
parse_str($response, $parse);
$each = json_decode($parse['data']);
foreach($each as $key => $order){
   //do something
}
4

2 に答える 2

9

問題は、タブ文字が文字列内で有効でないことです。

http://codepad.org/8fnQphkSのようにタブ文字を削除し、jsonlint.com でそれを使用すると、有効な json が表示されることがわかります。

JSON の仕様をhttp://www.ietf.org/rfc/rfc4627.txt?number=4627で特にセクション2.5で確認してください。文字列の中に。

編集:

すべてのタブと複数のスペースを取り除き、それらを単一のスペース文字に置き換える方法を次に示します。

$data = preg_replace('/[ ]{2,}|[\t]/', ' ', trim($data));
于 2013-07-24T23:33:08.030 に答える
6

そのようなことを試しましたか?弦をきれいにするのに役立ちます

$yourstring = preg_replace('/[^(\x20-\x7F)]*/','', $yourstring);
于 2013-07-19T18:25:13.850 に答える