-1

JSON フィードとして次の形式でデータを表示するように要求されました。

{
    "id": "123",
    "info": {
        "code": "ZGE",
        "description": "test1",
        "type": "AVL",
        "date": "09/08/2012"
    }
},
{
   "id": "456",
    "info": {
        "code": "ZDN",
        "description": "test2",
        "type": "CLR",
        "date": "16/02/2012"
    }
}

ただし、私のPHPコードでは、キーイテレータが必要だと思いますが、最終的には次の形式になります。

{

"0": {
    "id": "123",
    "info": {
        "code": "ZGE",
        "description": "test1",
        "type": "AVL",
        "date": "09/08/2012"
    }
},
"1": {

    "id": "456",
    "info": {
        "code": "ZDN",
        "description": "test2",
        "type": "CLR",
        "date": "16/02/2012"
    }
}
}

インデックス イテレータを使用せずに最初のデータ セットを作成する方法についてのアイデアはありますか?

4

4 に答える 4

3

シンプルなオブジェクトの配列を作成します。キーは必要ありません (リストを囲む [ ] に注意してください)

json.txt

[{
    "id": "123",
    "info": {
        "code": "ZGE",
        "description": "test1",
        "type": "AVL",
        "date": "09/08/2012"
    }
},
{
   "id": "456",
    "info": {
        "code": "ZDN",
        "description": "test2",
        "type": "CLR",
        "date": "16/02/2012"
    }
}]

example.php

<?php
    $data = json_decode(file_get_contents('./json.txt'));
?>
于 2013-01-07T11:08:08.363 に答える
1

最初の例で指定した JSON 形式 (つまり、要求された形式) は有効な JSON ではありません。

有効な JSON 文字列は、単一のJavascript オブジェクトに評価される必要があります。あなたが与えた例は、カンマで区切られた2つのJavascriptオブジェクトに評価されます。有効にするには、全体を角括弧で囲んで JS 配列に変換するか、中括弧で囲み、2 つのオブジェクトのそれぞれにキーを与える必要があります。

あなたが書いた PHP コードは、これら 2 つのオプションの 2 番目を実行しています。したがって、有効でありながら、予想される元のリクエストにほぼ近い、有効な JSON コードを生成しています。

これを行うために使用した PHP コードを示していただけると助かります。それがなければ、それを改善する方法について本当にアドバイスすることはできませんが、角括弧表記に切り替えたい場合は、PHP オブジェクトをキーなしの配列に入れるだけで、すべてをjson_encode()行う必要があります。 ; そのためにキー付き配列やイテレータを使用する必要はありません。

于 2013-01-07T11:21:42.463 に答える
1

次のように構築できます。

$arr = array(
    array(
        'id' => 123,
        'info' => array(
            'code' => 'ZGE',
            'description' => 'test1',
            'type' => 'AVL'
        )
    ),
    array(
        'id' => 456,
        'info' => array(
            'code' => 'ZDN',
            'description' => 'test2',
            'type' => 'CLR'
        )
    )
);

echo json_encode($arr);

出力

[
    {
        "id": 123,
        "info": {
            "code": "ZGE",
            "description": "test1",
            "type": "AVL"
        }
    },
    {
        "id": 456,
        "info": {
            "code": "ZDN",
            "description": "test2",
            "type": "CLR"
        }
    }
]
于 2013-01-07T11:23:27.793 に答える
0

json_encode が表示されている出力を生成する唯一の理由は、json_encode に渡す配列に別の名前付きキーを追加することです。デフォルトでは、必要に応じて機能するはずです。

$json = '[
    {
        "id": "123",
        "recall_info": {
            "code":"ZGE",
            "description": "test1",
            "type": "AVL",
            "date": "09/08/2012"
        }
    },
    {
        "id": "123",
        "recall_info": {
            "code": "ZDN",
            "description": "test2",
            "type": "CLR",
            "date": "16/02/2012"
        }
    }
]';

$php = array(
    (object) array(
        'id' => '123',
        'recall_info' => (object) array(
            'code' => 'ZGE',
            'description' => 'test1',
            'type' => 'AVL',
            'date' => '09/08/2012'
        )
    ),
    (object) array(
        'id' => '123',
        'recall_info' => (object) array(
            'code' => 'ZGE',
            'description' => 'test2',
            'type' => 'CLR',
            'date' => '16/02/2012'
        )
    )
);

var_dump(json_encode($php));
于 2013-01-07T11:20:47.393 に答える