11

json_encodeを使用して配列からjsonエンコードされた文字列を生成する際に問題が発生しました。

問題のアレイのセクションは次のようになります

RatingDistribution (Array, 11 elements)
    0 (Array, 1 element)
        0 (String, 3 characters ) 4.5
    1 (Array, 1 element)
        1 (String, 4 characters ) 11.9
    2 (Array, 1 element)

しかし、これを文字列で生成します。

"RatingDistribution":[["4.5"],{"1":"11.9"},

私はこれを期待します:

"RatingDistribution":[{"0":"4.5"},{"1":"11.9"},

私がしているのはこれだけです:

$result = json_encode($array);

何か間違ったことをしたことがありますか、それとも0キーが存在することを確認するためにさらにコードが必要ですか?

乾杯アンディ

4

3 に答える 3

21

あなたが得ている結果は期待されるべきです。json_encode配列で数値キーのみを使用していることを検出するため、JSONのオブジェクトではなく配列に変換します。ほとんどの場合、それはまさにあなたがやりたいことです。

何らかの理由でそうしない場合(なぜ?)、PHP> = 5.3では、JSON_FORCE_OBJECTフラグを使用して目的の出力を取得できます。

$result = json_encode($array, JSON_FORCE_OBJECT);
于 2013-03-08T09:39:50.247 に答える
6

json で配列を使用する場合は、JSON_FORCE_OBJECTパラメーターの代わりに配列をオブジェクトにキャストするだけです。

問題:

json_encode([0 => [1,2,3]]); // Return: [[1,2,3]]
json_encode(["0" => [1,2,3]]); // Return: [[1,2,3]]
json_encode([1 => [1,2,3]]); // Return: {"1":[1,2,3]}

私たちが期待するものではありません:

json_encode([0 => [1,2,3]], JSON_FORCE_OBJECT); // Return: {"0":{"0":1,"1":2,"2":3}}

解決:

json_encode((object)[0 => [1,2,3]]); // Return: {"0":[1,2,3]}
json_encode(new \ArrayObject([0 => [1,2,3]])); // Return: {"0":[1,2,3]}
于 2016-06-02T13:53:39.433 に答える
-2

Couは、たとえばstrvalまたは(string)を使用して、配列キーを文字列にキャストしようとすることができます。

于 2013-03-08T09:38:51.463 に答える