0

次のphp配列から正しいjson形式を取得できません

Array
(
    [0] => Array
        (
            [name] => name1
            [data] => Array
                (
                    [0] => Array
                        (
                            [5] => 2013-15-6,9
                            [6] => 2013-15-7,9
                            [7] => 2013-15-8,9
                            [8] => 2013-15-9,9
                            [9] => 2013-15-10,9
                            [10] => 2013-15-11,9
                            [11] => 2013-15-12,9
                        )

                )

        )

)

それをjson出力にエンコードする

[
    {
        "name": "name1",
        "data": [
            {
                "5": "2013-15-6,9",
                "6": "2013-15-7,9",
                "7": "2013-15-8,9",
                "8": "2013-15-9,9",
                "9": "2013-15-10,9",
                "10": "2013-15-11,9",
                "11": "2013-15-12,9"
            }
        ]
    }
]

json 出力を次のようにする必要があります。基本的に、データ配列内の中括弧を削除し、インデックス番号を削除すると、それは不可能だと思います。

[
    {
        "name": "name1",
        "data": [
            "2013-15-11,9",
            "2013-15-12,9"
        ]
    }
]

変数の周りで array() のさまざまな組み合わせを試しましたが、データ配列内にブラケットを追加することで十分に近くなりましたが、中括弧を取り除くことはできません。数時間これに取り組んできたので、本当に助けていただければ幸いです。ありがとう

4

3 に答える 3

1

私はあなたが期待しているjson出力を取り、それに対して実行しjson_decodeました。それが結果です:

Array
(
    [0] => stdClass Object
        (
           [name] => name1
           [data] => Array
                (
                    [0] => 2013-15-11,9
                    [1] => 2013-15-12,9
                )

        )

)

これが、PHP 構造体を に送信する前の状態json_encodeです。

PS私はそれをチェックしましたjson_encode(プロセスを逆にしました)、それはあなたが必要とするものを正確に返します。

于 2013-08-28T10:31:42.417 に答える
1

主な考え方は、インデックスを直接配置していない場合でも、PHP はそれらを から格納するということです0。つまり、配列に から始まる連続したインデックスがある場合にのみ、対応する JSON にキーがない場合があります0。それ以外の場合は、インデックスを配置する必要があります。これは、結果の JSON がキーと値の両方を保持する必要があるためです。

サンプルを参照してください:

$rgData = ['a','b','c'];
var_dump(json_encode($rgData));//string(13) "["a","b","c"]"
unset($rgData[0]);//now we're going from 1 numeric key
var_dump(json_encode($rgData));//string(17) "{"1":"b","2":"c"}" 

12番目のケースでは、から始まるインデックスがあり、JSONはそれを保持する必要があることに注意してください。これを行う唯一の方法は、インデックスを渡すことです。

次の方法で、配列を連続したキーに変換できます。

$rgData = [5=>'a',6=>'b',7=>'c'];
$rgData = array_values($rgData);
var_dump($rgData);//array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } 
于 2013-08-28T10:33:09.430 に答える