8

JSON でエンコードされた文字列を に渡し、json_decode()その出力がオブジェクト型であることを期待していますが、代わりに文字列型を取得しています。どうすればオブジェクトを返すことができますか?

ドキュメントでは、次はオブジェクトを返します。

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));

ただし、json_encode()最初に文字列を呼び出してから を呼び出すjson_decode()と、出力はオブジェクトではなく文字列になります。

$json = json_encode('{"a":1,"b":2,"c":3,"d":4,"e":5}');
var_dump(json_decode($json));

これは単なる単純化された例です。実際には、JSON でエンコードされた文字列を AJAX 経由で PHP にプッシュしています。ただし、このエンコードされた JSON 文字列を PHP で読み取ることができるオブジェクト (" $json->a" など) に変換する際の問題を示しています。

オブジェクト型を返すにはどうすればよいですか?

返信ありがとうございます!この質問の実際のコンテキストは、API からの JSON 応答を使用することでした。しかし、この応答に対して json_decode を実行し、次のような値にアクセスしようとすると - $json=json_decode(json response from API); echo $json->a エラーが表示されます: クラス stdClass のオブジェクトを文字列に変換できませんでした

4

3 に答える 3

6

この関数json_encodeは、ネイティブ PHP オブジェクトまたは配列を JSON 形式でエンコードするために使用されます。

たとえば、$json = json_encode($arr)_$arr

$arr = array(
  'a' => 1,
  'b' => 2,
  'c' => 3,
  'd' => 4,
  'e' => 5,
);

は文字列を返します$json = '{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}'。この時点で、!で再度エンコードする必要はありません。json_encode

配列を取得するには、単にjson_decode($json, true).

trueの呼び出しからを省略すると、JSON 文字列で指定されたさまざまなプロパティを使用して、代わりにjson_decodeのインスタンスが取得されます。stdClass

その他の参照については、次を参照してください。

http://www.php.net/manual/en/function.json-encode.php

http://www.php.net/manual/en/function.json-decode.php

于 2012-08-31T06:49:37.637 に答える
1

JSON 配列に書き込む代わりに、最初に PHP 配列に入れてみてください。

<?php
$array = array(
'a' => 1,
'b' => 2,
'c' => 3,
'd' => 4,
'e' => 5
);
//Then json_encode()
$json = json_encode($array);
echo $json;
die;
?>

あなたの場合、ajaxを使用しています。したがって、成功すると、次のことができます。

$.ajax({
    url: 'example.com',
    data: {

    },
    success: function(data) {
        console.log(data);
    }
});

console.log() 内のデータの後、data.a、data.b のような json 変数を追加できます...

また、提供した文字列は json 形式であるため、json_encode する必要はありません。

于 2012-08-31T07:05:13.470 に答える
0
var_dump(json_decode($json, true));

http://hk.php.net/manual/en/function.json-decode.php

于 2012-08-31T06:48:23.127 に答える