0

検索してみましたが見つかりませんでした。申し訳ありませんが、解決策が既に存在する場合に見逃した場合...

コード

$json = '[{"id":"2","value":"1"},{"id":"1","value":"1"},{"id":"3", "値":""},{"id":"4","値":""},{"id":"5","値":""},{"id":"6" ,"値":""},{"id":"7","値":""},{"id":"8","値":""},{"id":"9 ","値":""},{"id":"10","値":"1"}]';

$myArray = json_decode($json);
  foreach ($myArray as $key => $v) {
    if ($v->id == 10 && ($v->value == 0 || $v->value == 1)) {
        echo 'Value found at array key ' . $key;
    }
}  

出力

配列キー 9 で見つかった値

しかし、これは $json を一重引用符で囲んだ値で静的に指定した場合にのみ機能します...しかし、私の joomla プロジェクトでは、値はクラス変数の助けを借りてフェッチされるため$json=$item->extra_fields、静的文字列を与える代わりに使用すると機能しません$json。 .....

コード

 $json=$item->extra_fields;
  $myArray = json_decode($json);
  foreach ($myArray as $key => $v) {
    if ($v->id == 10 && ($v->value == 0 || $v->value == 1)) {
        echo 'Value found at array key ' . $key;
    }
}  

出力

警告: /components/com_k2/views/item/view.html.php の 484 行目の foreach() に無効な引数が指定されています


アップデート:

echo "JSON: $json<br/><br/>";
echo "DUMP: ".var_dump($myArray);

出力

JSON: [{"id":"2","value":"1"},{"id":"1","value":"1"},{"id":"3","value":""},
{"id":"4","value":""},{"id":"5","value":""},{"id":"6","value":"<br \/>"},
{"id":"7","value":"<br \/>"},{"id":"8","value":"<br \/>"},{"id":"9","value":"<br \/>"},
{"id":"10","value":"1"}]

NULL DUMP: 

--> json_decode で true を使用しても、出力は変更されません

ストリップスラッシュも機能しませんでした。チェック済み $item->extra_fields は文字列型です

4

2 に答える 2

0

@KilZone:返信ありがとうございます。私はあなたのコードを試していませんが、データベースからフェッチされていた文字列がブラウザに正しく表示されていましたが、ソースを表示して確認したところ、文字列は&quot;二重引用符ではなく表示されていました。

そこで、以下のコードを使用して置き換えたところ、問題は解決しました。

json_decode(str_replace("&quot;","\"",$item->extra_fields))

返信ありがとうございます。

于 2011-06-21T04:49:23.740 に答える
0

これは、コードやデコードしようとしている JSON データとは関係ありませんが、PHP 構成エラー (または意図的に行われます) です。私はこれに何度も遭遇しましたが、単純に機能が無効になっています。関数は実際に無効になっているのではなく、機能していませんが、結果は同じで、空の戻り値であることに注意してください。

最善の解決策は、代替コード (メソッド) を使用して JSON データをデコードすることです。これは、PHP Web サイトにあります。

function json_decode($json)
{
    $comment = false;
    $out = '$x=';

    for ($i=0; $i<strlen($json); $i++)
    {
        if (!$comment)
        {
            if (($json[$i] == '{') || ($json[$i] == '[')) $out .= ' array(';
            else if (($json[$i] == '}') || ($json[$i] == ']')) $out .= ')';
            else if ($json[$i] == ':') $out .= '=>';
            else $out .= $json[$i];
        }
        else $out .= $json[$i];
        if ($json[$i] == '"' && $json[($i-1)]!="\\") $comment = !$comment;
    }

    eval($out . ';');
    return $x;
}

このコードはきれいではありませんが、うまく機能します。私はこのコードを時々使用して、あなたが説明した同様の問題を抱えているサーバー上の JSON データをデコードしましたが、この関数を使用してデコードできないデータにまだ遭遇していません。

于 2011-06-20T14:25:16.397 に答える