0

この json を解析しようとしています '{"options":"[{\"order\":\"1\"},{\"skill\":\"\\n wajghjk \"},{\"order\":\"2\"},{\"skill\":\"\\n aswedrty \"},{\"order\":\"3\"},{\"skill\":\"\\n skill1 \"},{\"order\":\"4\"},{\"skill\":\"\\n wasedjk \"},{\"order\":\"5\"},{\"skill\":\"\\n Feldsher \"},{\"order\":\"6\"},{\"skill\":\"\\n wasedjk \"},{\"order\":\"7\"},{\"skill\":\"\\n Autotransfusionist \"},{\"order\":\"8\"},{\"skill\":\"\\n Feldsher \"},{\"order\":\"9\"},{\"skill\":\"\\n Autotransfusionist \"}]"}' 。コードを使用して

<?php
$json = '{"options":"[{\"order\":\"1\"},{\"skill\":\"\\n                        wajghjk                    \"},{\"order\":\"2\"},{\"skill\":\"\\n                        aswedrty                    \"},{\"order\":\"3\"},{\"skill\":\"\\n                        skill1                    \"},{\"order\":\"4\"},{\"skill\":\"\\n                        wasedjk                    \"},{\"order\":\"5\"},{\"skill\":\"\\n                        Feldsher                    \"},{\"order\":\"6\"},{\"skill\":\"\\n                        wasedjk                    \"},{\"order\":\"7\"},{\"skill\":\"\\n                        Autotransfusionist                    \"},{\"order\":\"8\"},{\"skill\":\"\\n                        Feldsher                    \"},{\"order\":\"9\"},{\"skill\":\"\\n                        Autotransfusionist                    \"}]"}';

$decode = json_decode($json, true);
$a=array();
echo '<br/>';
foreach($decode['options'] as $a)
{
    echo $a['order'];echo '<br/>';
     echo $a['skill'];echo '<br/>';
}
?>

しかし、エラーが表示され、解析できません。この json から order と skill の値を取得するより良い方法はありますか?

4

4 に答える 4

3

それはJSONではありません。エスケープする二重引用符が多すぎます。

于 2013-07-23T12:18:56.807 に答える
1

\文字列が一重引用符で区切られている場合、二重引用符はリテラル文字として表示されます。

json 文字列に対してストリップスラッシュを実行するか、最初からエスケープを回避してください

于 2013-07-23T12:19:08.490 に答える
1

エラーが表示され、解析できません。

PHP は json のデバッグが非常に苦手です。あなたができることは

$json_errors = array(
    "",
    "The maximum stack depth has been exceeded",
    "Invalid or malformed JSON",
    "Control character error, possibly incorrectly encoded",
    "Syntax error",
    "Malformed UTF-8 characters, possibly incorrectly encoded",
);

$decode = json_decode($json, true);
if ($error = json_last_error())
{
    trigger_error($json_errors[$error]);
}

ただし、値を取得するには、有効な json 文字列が必要です。任意の文字列が引用符とスラッシュで構成されるだけではありません。

もちろん、手動で json 文字列を作成することは決してありません。

于 2013-07-23T12:33:28.980 に答える