-1

Node JS Service から返される次の JSON 文字列があります。

"{\"success\":true,\"isavailable\":true}"

PHP で json_decode() を使用しようとすると、var_dump で次のようになります。

string '{"success":true,"isavailable":true}' (length=35)

それで、私は次のことをすることにしました:

$str = str_replace("\"{", "'{", $str);
$str = str_replace("}\"", "}'", $str);
$str = str_replace('\"','"',$str);

これを行うと、Return Last Error からの構文エラーと NULL の値が返されます。

では、PHP でこの JSON 文字列を解析する正しい方法は何ですか?

4

5 に答える 5

1
$obj = json_decode("{\"success\":true,\"isavailable\":true}");
echo $obj->success;
echo $obj->isavailable;

結果:

11

ここでは、(jsonの実際の値)を1表します(例:真の値)。true

この作業例でデモを見ることができます。

于 2012-07-05T19:02:11.530 に答える
1

正しい解決策(入力がOPにあるものとまったく同じであると仮定)は、trim()を呼び出した後に先頭と末尾の二重引用符を取り除くために使用することですstripslashes()

$str = '"{\"success\":true,\"isavailable\":true}"';
$str = trim( stripslashes( $str), '"');
var_dump( json_decode( $str));

今、あなたは得る

object(stdClass)#1 (2) { ["success"]=> bool(true) ["isavailable"]=> bool(true) }

また、この文字列が二重にエンコードされているように見えることも確認したため、次の方法でも適切にデコードできます。

$str = '"{\"success\":true,\"isavailable\":true}"';
var_dump( json_decode( json_decode( $str)));
于 2012-07-05T19:03:21.160 に答える
0

使用する

json_decode(stripslashes($json_string));
于 2012-07-05T19:01:22.407 に答える
0

あなたの入力は無効です。

$this = '"{\"success\":true,\"isavailable\":true}"';

あなたが本当に持っているものです。

したがって、実際には json_decode の問題ではなく、スラッシュと末尾の引用符の問題です。

上記のように交換またはトリミングすることで修正できます。

$obj = json_decode(trim(stripslashes('"{\"success\":true,\"isavailable\":true}\"'), '"'));

アクセスするには、次のようにします。

$obj->success 

$obj->isavailable

true はブール値であるため、1 を取得します。

しかし、個人的には、JSON 文字列へのこれらの「ハック」を回避するために、応答をエスケープすることを検討する必要があります。スラッシュや引用符のようなものは、エスケープせずに送信しないでください。

もちろん、それが独自の JSON 応答である場合。

于 2012-07-05T19:15:13.797 に答える
-1

$parsed = json_decode($whatever);

于 2012-07-05T19:00:27.773 に答える