3

これは説明するのが少し難しい問題なので、代わりに病気で見せてください。以下を見ると、有効なJSONが表示されます。

{
    "data":{
        "0":{
            "action_id":"1",
            "date":"2012-04-10 15:07:38",
            "action_type":"1",
            "action_text":"Some one got blamed!"
        },
        "1":{
            "action_id":"2",
            "date":"2012-04-10 16:18:05",
            "action_type":"1",
            "action_text":"Testing multiple items for AJAX"
        },
        "total":2,
        "ajax_message":"Success",
        "ajax_status":"0",
        "success":"true"
    }
}

ただし、アプリケーションが使用していた場合、「0」:、「1」を処理できません。代わりに、コンマで区切ってください。

これを生成するための私の現在のコードは次のとおりです。

while ($r = mysql_fetch_assoc($q)) {
        $array[] = $r;
    }
json_encode($array);

現時点ではかなりシンプルで生のもの。しかし、このように出力するには、自分でjson_encodeを作成する必要があると思います。

どんな助けでも大歓迎です

注:これは有効なフォームです(手書き):

{
"data": [
{
"action_id": "1",
"date": "2012-04-10 15:07:38",
"action_type": "1",
"action_text": "Some one got blamed!",
"fb_id": "760775384"
},
{
"action_id": "2",
"date": "2012-04-10 16:18:05",
"action_type": "1",
"action_text": "Testing multiple items for AJAX",
"fb_id": "760775384"
}
],
"total": 2,
"ajax_message": "Success",
"ajax_status": "0",
"success": "true"
}
4

3 に答える 3

3

問題は、数値キー(0、 )が名前付きキー( 、、など)1と同じレベルのハッシュにあることです。これを行う代わりに:totalajax_message

$a = array();
while ($r = mysql_fetch_assoc($q)){
    $a[] = $r;
}
$a['key'] = value;

これを行う:

$a = array();
$a['rows'] = array();
while ($r = mysql_fetch_assoc($q)){
    $a['rows'][] = $r;
}
$a['key'] = value;

配列内のすべてのキー($a['rows']この例では)が数値の場合、それを次json_encode()のように出力します[{list}, {like}, {this}]

于 2012-04-15T07:12:46.397 に答える
1

追加のレベルの配列が必要です。

あなたが持っている:

array( 
  'data' => array(
    '0' => array()
    '1' => array()
    'total' => 2,
    'etc' => 'blah'
  )
)

しかし、あなたはこれを求めています:

array( 
  'data' => array(
    array(),
    array()
  )
  'total' => 2,
  'etc' => 'blah'
)

Calが言うように、より深い問題は、エンコードしている配列の文字列キーと(暗黙の)数値キーが混在していることです。これはPHPでは問題ありませんが、JSONの配列には有効ではなく、オブジェクトにのみ有効です。

json_encode文字列キーのない配列をJSON配列としてエンコードしますが、有効なJSONであるためには、文字列キーの配列をオブジェクトとしてエンコードする必要があります。

于 2012-04-15T07:08:45.870 に答える
0
while ($r = mysql_fetch_assoc($q)) {
    $array[][] = $r;
}
json_encode($array);
于 2012-04-15T07:13:59.800 に答える