phpにおけるjsonの応用とは何ですか? (コード例)

不言
リリース: 2018-09-28 16:01:04
転載
1811 人が閲覧しました

この記事では、php での json の応用について説明します。 (コードサンプル) は、参考にしていただければ幸いです。

バージョン 5.2 以降、PHP は json_encode() 関数と json_decode() 関数をネイティブに提供します。前者はエンコードに使用され、後者はデコードに使用されます。

1. json_encode()

この関数は主に配列とオブジェクトを json 形式に変換するために使用されます。まず配列変換の例を見てみましょう:

$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}<span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token number"> <span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token number"><span class="token punctuation"></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>オブジェクト変換の別の例を見てください。

$obj->body = &#39;another post&#39;;
$obj->id = 21;
$obj->approved = true;
$obj->favorite_count = 1;
$obj->status  = NULL;
echo json_encode($obj);
ログイン後にコピー

結果は次のようになります: {"body":"another post","id":21,"approved":true,"favorite_count":1,"status":null}

json は utf-8 でエンコードされた文字のみを受け入れるため、 json_encode() のパラメーターは utf-8 でエンコードされている必要があります。そうしないと、空の文字または null が返されます。中国語で GB2312 エンコードを使用する場合、または外国語で ISO-8859-1 エンコードを使用する場合は、この点に特別な注意を払う必要があります。

2. インデックス付き配列と連想配列

PHP は 2 種類の配列をサポートしています。1 つは「値」(値) 配列のみを格納するインデックス付き配列です。 )、もう 1 つは名前と値のペアを格納する連想配列です。

JavaScript は連想配列をサポートしていないため、

json_encode() はインデックス付き配列を配列形式に変換するだけであり、連想配列をオブジェクト形式に変換します。

たとえば、インデックス配列があるとします

 $arr = array(&#39;one&#39;,&#39;two&#39;,&#39;three&#39;);
 echo json_encode($arr);
ログイン後にコピー
结果为:["one","two","three"]  
ログイン後にコピー

これを連想配列に変更すると:

 $arr = Array(&#39;1&#39;=>&#39;one&#39;, &#39;2&#39;=>&#39;two&#39;, &#39;3&#39;=>&#39;three&#39;);   
 echo json_encode($arr);
ログイン後にコピー

結果は次のように変わります: {"1": "1 つ"、"2":"2 つ"、"3":"3 つ"}

<span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token string"> <span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token string"><span class="token punctuation"></span></span></span></span></span></span></span></span></span></span></span></span>##データ形式が「[]」(配列)から「{}」(オブジェクト)に変更されていることに注意してください。 </span>

「インデックス配列」を「オブジェクト」に強制する必要がある場合は、次のように記述できます:

 json_encode( (object)$arr );
ログイン後にコピー

または:

 json_encode ( $arr, JSON_FORCE_OBJECT );
ログイン後にコピー
3. クラス変換

次は PHP クラスです:

class Foo {
    const ERROR_CODE = &#39;404&#39;;
    public    $public_ex = &#39;this is public&#39;;
    private   $private_ex = &#39;this is private!&#39;;
    protected $protected_ex = &#39;this should be protected&#39;; 
    public function getErrorCode() {
        return self::ERROR_CODE;
    }
}
ログイン後にコピー
次に、このクラスのインスタンスで json 変換を実行します:
 $foo = new Foo;
 $foo_json = json_encode($foo);
 echo $foo_json;
ログイン後にコピー

出力結果は次のようになります: {"public_ex":"this is public"}

<span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token string"><span class="token punctuation"># ################### ########################見られます、# ##パブリック変数 (public) を除いて、その他のもの (定数、プライベート変数、メソッドなど) は失われます。 </span></span></span></span>4. json_decode()</span>この関数は、json テキストを対応する PHP データ構造に変換するために使用されます。以下に例を示します。 <span class="token punctuation"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$json = &amp;#39;{&quot;foo&quot;: 12345}&amp;#39;; $obj = json_decode($json); print $obj-&gt;{&amp;#39;foo&amp;#39;}; // 12345  </pre><div class="contentsignin">ログイン後にコピー</div></div><span class="token string"><span class="token punctuation">通常、 json_decode() は常に配列ではなく PHP オブジェクトを返します。 <span class="token string">例: <span class="token punctuation"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$json = &amp;#39;{&quot;a&quot;:1,&quot;b&quot;:2,&quot;c&quot;:3,&quot;d&quot;:4,&quot;e&quot;:5}&amp;#39;; var_dump(json_decode($json)); </pre><div class="contentsignin">ログイン後にコピー</div></div></span>結果として、PHP オブジェクトが生成されます: </span><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">object(stdClass)[2] public &amp;#39;a&amp;#39; =&gt; int 1 public &amp;#39;b&amp;#39; =&gt; int 2 public &amp;#39;c&amp;#39; =&gt; int 3 public &amp;#39;d&amp;#39; =&gt; int 4 public &amp;#39;e&amp;#39; =&gt; int 5</pre><div class="contentsignin">ログイン後にコピー</div></div></span></span>PHP 連想配列の生成を強制したい場合、json_decode() は次のようにする必要があります。パラメータ true を追加します: </span>

$json = &#39;{"a":1,"b":2,"c":3,"d":4,"e":5}&#39;;
var_dump(json_decode($json,true));   
ログイン後にコピー

結果は連想配列になります:

array (size=5)
  &#39;a&#39; => int 1
  &#39;b&#39; => int 2
  &#39;c&#39; => int 3
  &#39;d&#39; => int 4
  &#39;e&#39; => int 5
ログイン後にコピー

json_decode() の一般的なエラー。次の 3 つの JSON の書き方はすべて間違っています。はい、どこが間違っているかわかりますか?

$bad_json = "{ &#39;bar&#39;: &#39;baz&#39; }";
$bad_json = &#39;{ bar: "baz" }&#39;;
$bad_json = &#39;{ "bar": "baz", }&#39;;
ログイン後にコピー
これら 3 つの文字列 に対して json_decode() を実行すると、null

が返され、エラーが報告されます。

第一个的错误是,json的分隔符(delimiter)只允许使用双引号,不能使用单引号。

第二个的错误是,json名值对的"名"(冒号左边的部分),任何情况下都必须使用双引号

第三个的错误是,最后一个值之后不能添加逗号(trailing comma)
另外,json只能用来表示对象(object)和数组(array),如果对一个字符串或数值使用json_decode(),将会返回null。

var_dump(json_decode("Hello World")); //null
ログイン後にコピー

以上がphpにおけるjsonの応用とは何ですか? (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!