PHPからJavaScriptにJSONを返す?


135

jQuery AJAXを介して呼び出されるPHPスクリプトがあります。PHPスクリプトがJSON形式のデータをJavaScriptに返すようにします。PHPスクリプトの疑似コードは次のとおりです。

$json = "{";
foreach($result as $addr)
{
    foreach($addr as $line)
    {
        $json .= $line . "\n";
    }
    $json .= "\n\n";
}
$json .= "}";

基本的に、2つのforループの結果を$ jsonに挿入する必要があります。

回答:


194

PHPには、組み込みのJSONシリアル化関数があります。

json_encode

json_encode

Not Invented Here症候群に苦しむことができ、苦しんでいない場合は、それを使用してください


2
優れたありがとう。私は実際にSOに投稿する前にこれを調べましたが、私のホスティングで利用できるとは思いませんでした。
AquinasTub 2009年

この「答え」は完全ではなく、あまり役に立たない。詳細については、esedeeからの回答を参照してください。
Funk Doc

問題のOPは、それらが唯一の選択肢であるという仮定の下で、JSONを手作業でつなぎ合わせていました。それが唯一の選択肢ではないことを知っていたのは、適切なソリューションでした。そのJSONの最終結果がHTTP応答として発行される義務はありません。「ヘッダーを追加する」情報は、ある状況では役立ちますが、そのJSONで行っていることが単に「Webページにそのまま返す」だけではない場合は役に立ちません。この質問は、ユースケースを明確にするものではありませんでした。
ケントフレドリック

(さらに、AJAXの場合、ヘッダーの設定は厳密には必要ありません。突然の場合は謝罪しますが、引用符で囲まれた「answer」という単語で示される色合いは、本当に10年前のことです。すでに死んでしまいました。私はPHPからずっと先に進んでいたので、移動先の言語今は別の言語に移動しています)
Kent Fredric

145

ここでは、以前の回答で欠けていたものをいくつか示します。

  1. PHPにヘッダーを設定します。

    header('Content-type: application/json');
    echo json_encode($array);
  2. json_encode()JavaScript オブジェクトの代わりにJavaScript 配列を返す ことができます。PHPスクリプトからJSONを返すを参照してください。配列とオブジェクトは同じではない場合があるため、これは重要な場合があります。


2
データはreturn ed ではなくecho edであることに注意することが重要です。コンセプトを最初に学習したとき、それは私にとって良いことです。一般的なプログラミングでは、ほとんどすべてが「印刷」されずに通常返されます。
Juha Untinen、2015年

@Juhaさん、json_encode()(すべての関数と同様に)常に何か(を含むNULL)が返されることに注意してください。データを印刷し、処理してから印刷し、後で使用できるように変数に割り当てたり、ファイルに保存したりできます。詳細についてreturnは、PHP:戻り値を参照してください。また、することができます(とすべきである!)あなたがリターンを知らない何の各機能のチェック、私たちの例を参照json_encode()を、それは述べて戻り値をJSONには、失敗した場合に成功またはFALSEに文字列をエンコードされました。
aesede

当時、私はなぜそれreturn json_encode($jsonArray);が機能しないのか疑問に思っていました(AngularJS http.getは何も取得しませんでした)。後で気付くまで:)
Juha Untinen

83

PHPのドキュメントにJSONセクションがあります。ただし、PHP 5.2.0が必要です。

PHP 5.2.0以降、デフォルトでJSON拡張がバンドルされ、PHPにコンパイルされます。

そうでない場合は、ここにインストールできるPECLライブラリがあります。

<?php
    $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

    echo json_encode($arr); // {"a":1,"b":2,"c":3,"d":4,"e":5}
?>

13

通常、受信側のデータに何らかの構造を持たせることにも関心があります。

json_encode($result)

これにより、配列キーも保持されます。

json_encodeはutf8でエンコードされたデータでのみ機能することを覚えておいてください。


4

PHPにSimple JSONを使用できます。ヘッダーを送信して、JSONを偽造するのに役立ちます。

それは次のようになります:

<?php
// Include the json class
include('includes/json.php');

// Then create the PHP-Json Object to suits your needs

// Set a variable ; var name = {}
$Json = new json('var', 'name'); 
// Fire a callback ; callback({});
$Json = new json('callback', 'name'); 
// Just send a raw JSON ; {}
$Json = new json();

// Build data
$object = new stdClass();
$object->test = 'OK';
$arraytest = array('1','2','3');
$jsonOnly = '{"Hello" : "darling"}';

// Add some content
$Json->add('width', '565px');
$Json->add('You are logged IN');
$Json->add('An_Object', $object);
$Json->add("An_Array",$arraytest);
$Json->add("A_Json",$jsonOnly);

// Finally, send the JSON.

$Json->send();
?>

警告:PHP用のシンプルなJSONはGPLv2でライセンスされているため、使用するには独自のコードをオープンソースにする必要があります。
ジェイミーバーチ

1
現在MITライセンス:)
Alexis Paques 2018

1
@JamieBirch実際には、GPLの仕組みを誤解していると思います。AGPLについて話していたら、何かに夢中になります。しかし、インターネットの広大なスクリードはGPLソフトウェアに基づいて構築されており、ユーザーの制御下で実行可能ファイルを提供せず、インターフェースを提供するだけなので、コードをオープンソース化する義務はありません。彼らの唯一の義務は、プロジェクトのデジタルコピーを提供するすべての人にもソースを提供する必要があることです。
ケントフレドリック

1

$ msg = "You Enter Wrong Username OR Password"; $ responso = json_encode($ msg);

echo "{\"status\" : \"400\", \"responce\" : \"603\", \"message\" : \"You Enter Wrong Username OR Password\", \"feed\":".str_replace("<p>","",$responso). "}";
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.