WebプログラミングV

 目次へ 前へ 次へ

2013/10/1 久米

T.XMLとJSONとAPI

2.JSON

2.1 JSONとは

 

xml

json
可読性(人間) ×
データ量 × ○少ない(約半分)
構文解析(SW)

2.2 JSONの構造

(1)基本形{"プロパティ名":値}

{"title":"吾輩は猫である"}
{
"title":"吾輩は猫である",
"chosha":"夏目漱石",
"price":680
}

(2)配列 "配列名":[・・・]

{
"book":[
"吾輩は猫である",
"坊ちゃん",
"三四郎"
]
}

(3)オブジェクト(データの塊) {・・・}

{
"book":[
{
"title":"吾輩は猫である",
"chosha":"夏目漱石",
"price":680
},
{
"title":"坊ちゃん",
"chosha":"夏目漱石",
"price":380
},
{
"title":"三四郎",
"chosha":"夏目漱石",
"price":980
}
]
}

演習1 八百屋さんにある商品3つをJSONで表現してみよ

例 かぼちゃ 100円 在庫20個


=======================注意==========================
htdos>web3>121113>kinokuniya.json
(1)jsonファイルは、文字コードはUTF-8N(UTF-8BOM無、UTF-8のみ表記の場合それはUTF-8BOM無である)
改行はLF  で保存すること
(2)一度、異なった文字コードで書いた場合は
全書き直し、あるいは変換ツールでUTF-8Nに変換のこと
変換ツールは例えばKanjiTranslator

 

1.3 解読

JSONのデータをPHPで読みにゆき、それを解読する(オブジェクト生成する)方法

  json
メソッド
$json = file_get_contents("jsonファイル");

$obj = json_decode($json);
  読み取りは通常の file_get_contentsメソッドを使い
オブジェクトを生成するのはjson_decodeメソッドを使う

具体例

  json

xml再掲

記述例
{
	"book":[
		{
			"ISBN":"1254000",
			"category":"小説",
			"title":"我輩は猫である",
			"price":500
		},
		{
			"ISBN":"25004000",
			"category":"小説",
			"title":"坊ちゃん",
			"price":600
		},
		{
			"ISBN":"40880500",
			"category":"漫画",
			"title":"スラムダンク",
			"price":400
		}
	]
}
<?xml version="1.0" encoding="UTF-8"?>
<yajimaya>
    <book ISBN="1254000">
        <category>小説</category>
        <title>我輩は猫である</title>
        <price>500</price>
    </book>
    <book ISBN="25004000">
        <category>小説</category>
        <title>坊ちゃん</title>
        <price>600</price>
    </book>
    <book ISBN="40880500">
        <category>漫画</category>
        <title>スラムダンク</title>
        <price>400</price>
    </book>
</yajimaya>
取得
表示例
<?php
$json = file_get_contents("yajimaya.json");

if ($json == false) {
	print "保守中です";
	return;
}

$obj = json_decode($json);

$book = $obj->book; 
$ttl0 = $book[0]->title; 
$ttl1 = $obj->book[1]->title;
print "$ttl0 $ttl1 \n"; 
?>
<?php
$obj = simplexml_load_file("yajimaya.xml");

if ($obj == false) {
	print "保守中です";
	return;
}

$book = $obj->book; 
$ttl0 = $book[0]->title; 
$ttl1 = $obj->book[1]->title;

print "$ttl0 $ttl1 \n"; 
?>
外部
URL
取得
表示例
<?php
$json = file_get_contents(
	"http://tepco-usage-api.appspot.com/latest.json");

if ($json == false) {
	print "東京電力APIのサーバはダウン中";
	return;
}

$obj = json_decode($json);

$year = $obj->year; 
$month = $obj->month; 
$day = $obj->day; 

print "$year $month $day \n"; 

?>
<?php
$obj = simplexml_load_file(
"http://dailynews.yahoo.co.jp/fc/economy/rss.xml"); if ($obj == false) { print "サーバはダウン中"; return; } $ttl=$obj->channel->title; $ttl2=$obj->channel->item[0]->title; print "$ttl \n $ttl2 \n"; ?>

※注意 phpファイルをsimplexml_load_filefile_get_contentsで読む場合は

$obj =file_get_contents("yajimaya.php"); ではなく
$obj =file_get_contents("http://・・・/yajimaya.php"); のようにapacheを通して読む

なぜなら単にyajimaya.phpだとphpソースそのものを読んでしまうため。

演習2 よく行くスーパーの商品jsonファイルを作り読み取り表示するPHPを作成せよ。

演習3 下記jsonを読み取り、こんな感じに表示するPHPを作成せよ。

http://www.shogidojo.com/koshi/web3/01/json/nekokuniya.json

 

1.4 外部JSON配信サービス

livedoorお天気Webサービス

演習4 お天気サービスで適当な cityを選んで、今日、明日、明後日の天気を表示してみよ。

 

コラム json_decodeはPHP5.2.0から使用可能

昔のPHPバージョンではjson_decodeは使えないので
JSON.phpなどのjson処理用ファイルをダウンロードしてきてjson解析する。
下記は例。

<?php
require_once "JSON.php";
//参照http://itpro.nikkeibp.co.jp/article/COLUMN/20070307/264116/

$json = file_get_contents("http://www.shogidojo.com/php/json/win30.json");
$obj = new Services_JSON;
$moh = $obj->decode($json);
//print var_dump($moh);
//print "<br /><br />";
print $moh->error;
print "<br />";
print $moh->best_win[0]->n;
print "<br />";
print $moh->best_win[0]->w;
print "<br />";
print $moh->best_win[10]->g;
?>

 

 

まとめ

演習1 下記の情報をxmlで表現せよ。

演習2 下記の情報をjsonで表現せよ。

演習3 上記を読み取るphpを作成せよ。