ホームページ  >  記事  >  ウェブフロントエンド  >  phpにおけるjsonの応用とは何ですか? (コード例)

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

不言
不言転載
2018-09-28 16:01:051843ブラウズ

この記事では、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"><pre class="brush:php;toolbar:false">$json = '{&quot;foo&quot;: 12345}'; $obj = json_decode($json); print $obj-&gt;{'foo'}; // 12345  </pre> <span class="token string"><span class="token punctuation">通常、 json_decode() は常に配列ではなく PHP オブジェクトを返します。 <span class="token string">例: <span class="token punctuation"><pre class="brush:php;toolbar:false">$json = '{&quot;a&quot;:1,&quot;b&quot;:2,&quot;c&quot;:3,&quot;d&quot;:4,&quot;e&quot;:5}'; var_dump(json_decode($json)); </pre></span>結果として、PHP オブジェクトが生成されます: </span><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></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 までご連絡ください。