0

AngularJS を php バックエンドと組み合わせようとしています。現在、phpでjsonを生成して、Angularへのhttpリクエストに返そうとしています。これまでのところ、私はこのphpを作成しました。

$dbhost = "localhost";
$dbport = "5432";
$dbname = "fixevents";
$dbuser = "postgres";
$dbpass = "123";
$connect = pg_connect("host=" . $dbhost . " port=" . $dbport . " dbname=" . $dbname . " user=" . $dbuser . " password=" . $dbpass);

$query = "SELECT contact_firstname, contact_lastname, contact_id, contact_email FROM contact WHERE user_id = 1";
$result = pg_query($connect, $query);

$comma = '';
$json = '[';
while ($row = pg_fetch_array($result)) {
    $json .= $comma . '{';
    $json .= 'contact_firstname:"' . addslashes($row['contact_firstname']) . '",';
    $json .= 'contact_lastname:"' . addslashes($row['contact_lastname']) . '",';
    $json .= 'contact_id:' . addslashes($row['contact_id']) . ',';
    $json .= 'contact_email:[';
    $contact_email = explode(',,,', addslashes($row['contact_email']));
    $comma_email = '';
    foreach($contact_email as $email) {
        $json .= $comma_email . '"' . $email . '"';
            $comma_email = ',';
    }
    $json .= ']';
    $json .= '}';
    $comma = ',';
}
$json .= ']';

echo $json;

しかし、私は私よりも優れた心のコメントをいくつか読みました:)そして、jsonを手動で作成することは最善の考えではないと彼らは言いました。このjsonをよりスタイリッシュな方法で生成する方法を教えてもらえますか? json_endode と配列について何かを見ましたが、リスト内にリストを追加する方法がわかりません。リストがあり、各リスト項目内に別のリストがあり、1 つの連絡先がより多くのメールを受け取ることができるためです。私の生成されたJSONは今このようになります

[{contact_firstname:"Daniel",contact_lastname:"Pacuraru",contact_id:1,contact_email:["pacurarudaniel@gmail.com","hello@pacurarudaniel.com"]},{contact_firstname:"Someone",contact_lastname:"Else",contact_id:2,contact_email:["someone.else@gmail.com"]}]

ありがとう、ダニエル!

編集

$myjson = array();
    while($row = pg_fetch_array($result)) {
        $json = array(
            'contact_firstname' => addslashes($row['contact_firstname']),
            'contact_lastname'  => addslashes($row['contact_lastname']),
            'contact_id'        => addslashes($row['contact_id']),
            'contact_email'     => explode(',,,', addslashes($row['contact_email']))
        );
        array_push($myjson, $json);
    }

    echo json_encode($myjson);
4

3 に答える 3

4

これは無効な json です (キーには二重引用符を使用する必要があります)。私のアドバイス: ネストされた PHP 配列 (および/またはオブジェクト) を作成し、json_encode. このようにして、文字列内の改行をエスケープするなど、他の問題も回避できます。

例えば:

$some_data = array(
    'something' => 10,
    'something_else' => "foo",
    'some_array' => array(1,2,3,4)
);
echo json_encode($some_data);

出力:

{"something":10,"something_else":"foo","some_array":[1,2,3,4]}
于 2013-10-02T21:14:32.977 に答える
2

データを使用して配列を作成し、arry を に渡すと、適切にjson_encodeフォーマットされた文字列が得られます。

$BigArray = array();
$Index = 0;

while($row = getSomeData()){

    $BigArray[$Index] = array(
        'Name'    => $row['name'],
        'Age'     => $row['age'],
        'Colors'  => array(
            '0'        => 'Red',
            '1'        => 'Blue'
        )
    );

    $Index++;

}

echo json_encode($array);

{"Name":"Matt","Age":"20","Colors":["Red","Blue"]}

編集

より効率的な方法(とにかくデータが少ないと思います...)

$Names = array();
$Ages = array();
$Colors = array();

$Index = 0;

while($row = getSomeData()){

    $Names[$Index] = $row['name'];
    $Ages[$Index] = $row['age'];
    $Colors[$Index] = array(
        '0',    => 'Red',
        '1',    => 'Blue'
    };

    $Index++;

}

$JSonArray = array(
    'Names'    => $Names,
    'Age'      => $Ages,
    'Color'    => $Colors
);

json_encode($JSonArray);

ここでの違いは、配列内の各オブジェクトに名前と値のペアがあることです。

名前: マット 年齢: 20歳、名前: ジェイソン、年齢: 24歳

名前の配列があります。

名前: マット、ジェイソン、エリック
年齢: 20、24、26

于 2013-10-02T21:15:21.180 に答える
0

ネイティブ PHP オブジェクトを作成して使用するだけjson_encodeです。

json_encode($obj);

したがって、これの代わりに:

$comma = '';
$json = '[';
while ($row = pg_fetch_array($result)) {
    $json .= $comma . '{';
    $json .= 'contact_firstname:"' . addslashes($row['contact_firstname']) . '",';
    $json .= 'contact_lastname:"' . addslashes($row['contact_lastname']) . '",';
    $json .= 'contact_id:' . addslashes($row['contact_id']) . ',';
    $json .= 'contact_email:[';
    $contact_email = explode(',,,', addslashes($row['contact_email']));
    $comma_email = '';
    foreach($contact_email as $email) {
        $json .= $comma_email . '"' . $email . '"';
            $comma_email = ',';
    }
    $json .= ']';
    $json .= '}';
    $comma = ',';
}
$json .= ']';

echo $json;

これだけが必要です:

echo json_encode($result);
于 2013-10-02T21:15:11.557 に答える