最近、短縮URLのAPIインターフェースを開発しており、APIに関する多くの記事を読んでいました。最もよく使われているのがJSON技術です。JSONはJavaScript Object Notationとも呼ばれ、軽量なデータ交換形式です。私のAPIの開発言語はPHPなので、データ処理の過程でJSONとPHPの連携、つまりデータ変換を利用する必要があります。

ここでは主に、JSONと配列(Array)を相互変換する2つの方法を紹介します。

json_encode()

JSONはUTF-8エンコードの文字しか受け付けないため、json_encode() の引数はUTF-8でエンコードされていなければなりません。そうでない場合、空文字列または null が返されます。中国語で GB2312 エンコードを使用する場合は、この点に特に注意してください!

例1(配列)

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

出力

{"a":1,"b":2,"c":3,"d":4,"e":5}

例2(オブジェクト)

<?php
$obj->body           = 'another post';  
$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_decode()

この関数はJSONテキストを対応するPHPデータ構造に変換するために使用します。通常、json_decode() は配列ではなく、常にPHPオブジェクトを返します。

例3

<?php
$json ='{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
?>

出力

object(stdClass)#1 (5) {
  ["a"] => int(1)
  ["b"] => int(2)
  ["c"] => int(3)
  ["d"] => int(4)
  ["e"] => int(5)
}

PHPの連想配列を強制的に生成したい場合は、json_decode()true という引数を追加する必要があります。

例4

<?php
$json ='{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json,true));
?>

出力

array(5) {
   ["a"] => int(1)
   ["b"] => int(2)
   ["c"] => int(3)
   ["d"] => int(4)
   ["e"] => int(5)
}

また、JSONはオブジェクト(object)と配列(array)のみを表現できます。文字列または数値に対して json_decode() を使用すると、null が返されます。