構文を取得すれば、JSON ファイルまたは文字列の解析は XML の解析と同じくらい簡単です。このチュートリアルでは、その構文を解析して学習する方法を示します。ただし、始める前に、まだ知らない場合に備えて、PHP 配列の命名規則を確立しましょう。
次の PHP 配列を見てください。
$arrayName[key]=value;
PHP の配列には 3 つの部分があります。使用される名前または変数、キー (連想または数値)、およびそのキーの値。
PHP で JSON 文字列またはファイルを読み取ったり解析したりするとき、基本的に行うことは、一連のキーを変数なので、その変数は連想配列になります。連想または数値という用語を聞いたことがない方のために付け加えておきますが、数値とは単に数値をキーとして使用していることを意味します。
規約がわかったので、単純な JSON 文字列を見てみましょう。
$string='{"name":"John Adams"}';
次のように考えることができます。値「John Adams」を保持するキー「name」としての文字列。括弧に注目してください。括弧はキーの配列を区切るために使用されます。したがって、この JSON 文字列に次の命名規則を与えることができます
{"key":"value"}
PHP で JSON を解析するには、関数 json_decode を使用します。この関数は、最初のパラメーターとして json 文字列を受け取り、オプションのブール値 (true/false) を受け取ります。 2 番目のパラメータ。 2 番目のパラメーターは、true に設定されている場合、json 文字列を連想配列として返します。設定されていない場合は、オブジェクトを返します。 2 つのオプションの主な違いは、キーを参照するために使用する構文です。今のところ、より使い慣れた連想配列を返すように 2 番目のパラメーターを true に設定しますが、オブジェクトについても説明します。
これで、この新しい関数について知ってください。あなたの php ファイルを私のもののように見せてください。
$string='{"name":"John Adams"}';$json_a=json_decode($string,true);
2 番目のパラメータを true に設定して json_decode を使用すると、変数 $json_a に連想配列が割り当てられるため、$json_a は配列になります。連想配列を参照するために「_a」を使用します。後で $json_o を使用して、json をオブジェクトとして保持する変数を参照しますが、任意の変数名を使用できます。
上記のコードを次のように翻訳しましょう。同じことを行う、よりよく知られた基本的なスニペットです。
$json_a=array("name"=>"John Adams");// or also$json_a["name"]="John Adams";
これで、「$json_a」で何ができるかは明らかですよね? 「name」の内容を表示するには、次のように $json_a[name] を単に echo します
echo $json_a[name];// and you should see the name John Adams printed on your browser.
それは簡単でした。今度は同じ JSON 文字列を使用しましょう。ただし、今回は 2 番目のパラメータを設定しません。オブジェクトを取得します。 php ファイルに次のコードを入力します。
$string='{"name":"John Adams"}';$json_o=json_decode($string);
今回は、配列を返す代わりに、json_decode はオブジェクトを返しています。オブジェクトという言葉は少し怖く聞こえるかもしれませんが、これはまったく難しいことではありません。
「名前」の内容を表示するには、これを行うだけです
echo $json_o->name;
違いがわかりますか$json_a と $json_o のコンテンツの出力の間で?それは正しい!唯一の違いは、$json_o では先頭の "]" を削除し、"[" を "->" に置き換えることです。もう少し面白くしてください。この時点までの php ファイルの内容は次のようになります
echo $json_a[name];// andecho $json_o->name;// will both display “John Adams”
$string 変数の値を変更するときは常に、このチュートリアルの残りの部分では最後の 2 行を json_decode で保持してください。
$string='{"name":"John Adams"}';// create object from string$json_o=json_decode($string);// create array from string$json_a=json_decode($string,true);
$string の新しい見た目から推測できるように、キーと値の各セットをカンマで区切ります。したがって、年齢の値 (40 歳) を表示するには、次の 2 つの方法のいずれかを使用できます。
$string='{ "name":"John Adams", "age":"40" }';$json_o=json_decode($string);$json_a=json_decode($string,true);
しかし、この JSON 文字列はまだ単純すぎるため、1 つのキーに 2 つのキーを割り当ててみませんか。新しい JSON 文字列は次のようになります。
// associative array modeecho $json_a[age];// object modeecho $json_o->age;
これまでに行ったことは、名前「John Adams」を 2 つの「サブキー」に分離したことです。このようにして、これらの新しいキーの値を表示できます。
$string='{ "name":{"first":"John","last":"Adams"}, "age":"40" }';
ここまでは、おそらく json で使用されている記号 [ と ] を見たことがあるでしょう。それは新しい $string 変数に含まれるものだからです。
// array method // display first name echo $json_a[name][first]; // display last name echo $json_a[name][last];// object method // display first name echo $json_o->name->first; // display last name echo $json_o->name->last;
We use [ and ] to indicate that we have an array of keys, that is more than one set of { }'s. That means then, that this string has two arrays , each of them separated by { and } and followed by a comma except for the last one. This array is numeric, so to access "age" in the second array we'll do the following.
// remember that arrays start at zero, that's why we use 1 to refer to the second array// array methodecho $json_a[1][age];// object methodecho $json_o[1]->age;
In your web development career you will encounter yet another type of json string.
$string='{"person": [ { "name":{"first":"John","last":"Adams"}, "age":"40" }, { "name":{"first":"Thomas","last":"Jefferson"}, "age":"35" } ] }';
This string is just like the previous one except that we have added {"person": at the beginning and to close, we added a } at the end.
What we have here is two "person" arrays one for John and one for Thomas. You can display both last names with this snippet of code.
// array method // first person "0"echo $json_a[person][0][name][last]; // second person "1"echo $json_a[person][1][name][last];// object method // first person "0"echo $json_o->person[0]->name->last; // second person "1"echo $json_o->person[1]->name->last;
It all seems fine, until we have a 100 "person" array or more! But don't worry. Because these arrays are numeric we can use a loop to go through a huge array like that. I like to use "foreach" loops but you can use "while", "for" or "do while" loops if you want. The next snippet will show you how you can get each person's information using a foreach loop.
$string='{"person":[ { "name":{"first":"John","last":"Adams"}, "age":"40" }, { "name":{"first":"Thomas","last":"Jefferson"}, "age":"35" } ]}';$json_a=json_decode($string,true);$json_o=json_decode($string);// array methodforeach($json_a[person] as $p){echo 'Name: '.$p[name][first].' '.$p[name][last].'Age: '.$p[age].'';}// object methodforeach($json_o->person as $p){echo 'Name: '.$p->name->first.' '.$p->name->last.'Age: '.$p->age.'';}
Reading a JSON is just as easy and it does not have a special extension, the file just has to output a json string. To read a JSON file you can use the function file_get_contents like this $string=file_get_contents(filepath) . Now pass $string to json_decode and parse.
From:http://webhole.net/2009/08/31/how-to-read-json-data-with-php/