PHPでXML形式データをオブジェクト・JSON・連想配列に変換する方法
先日バニラJavaScriptでXML形式データの取り扱いとJSON形式への変換方法をメモしたが、同じようなことをPHPでも行いたい。具体的には何らかのAPIからXML形式のデータを取得し、オブジェクト・JSON・連想配列に変換させたい。以下に対応方法をメモ。
使用するAPI
以下の郵便番号による住所検索APIを使用する。
https://geoapi.heartrails.com/api.html#postal
対応方法
ソースコード
<?php
$url = 'https://geoapi.heartrails.com/api/xml?method=searchByPostal&postal=1050003';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if( !curl_errno($ch) && curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200' ){
//オブジェクトに変換
$obj = simplexml_load_string($response);
var_dump($obj);
//JSONに変換
$json = json_encode($obj);
var_dump($json);
//連想配列に変換
$array = json_decode($json, true);
var_dump($array);
}else{
echo 'error';
}
curl_close($ch);
出力結果
//オブジェクト
object(SimpleXMLElement)#2 (1) {
["location"]=>
object(SimpleXMLElement)#3 (8) {
["city"]=>
string(6) "港区"
["city-kana"]=>
string(12) "みなとく"
["town"]=>
string(9) "西新橋"
["town-kana"]=>
string(18) "にししんばし"
["x"]=>
string(9) "139.75198"
["y"]=>
string(9) "35.666286"
["prefecture"]=>
string(9) "東京都"
["postal"]=>
string(7) "1050003"
}
}
//JSON
string(239) "{"location":{"city":"\u6e2f\u533a","city-kana":"\u307f\u306a\u3068\u304f","town":"\u897f\u65b0\u6a4b","town-kana":"\u306b\u3057\u3057\u3093\u3070\u3057","x":"139.75198","y":"35.666286","prefecture":"\u6771\u4eac\u90fd","postal":"1050003"}}"
//連想配列
array(1) {
["location"]=>
array(8) {
["city"]=>
string(6) "港区"
["city-kana"]=>
string(12) "みなとく"
["town"]=>
string(9) "西新橋"
["town-kana"]=>
string(18) "にししんばし"
["x"]=>
string(9) "139.75198"
["y"]=>
string(9) "35.666286"
["prefecture"]=>
string(9) "東京都"
["postal"]=>
string(7) "1050003"
}
}
リファレンス
simplexml_load_string
https://www.php.net/manual/ja/function.simplexml-load-string.php
json_encode
https://www.php.net/manual/ja/function.json-encode
json_decode
関連記事
-
-
メールサーバーを構築せずにGmailのSMPTを使ってPHPでメール送信
メールサーバーが立てられなかったり、無料サーバーのため使えなかったりといった場合 ...
-
-
PHPで配列のキーの最大値を取得する方法
配列のキーに整数値が入っていて、その中から最大値を取得したいケースがあった。調べ ...
-
-
PHPで住所や名前のテキストをランダム生成するライブラリFakerPHPの使い方
PHPでランダムなデータを生成したい際に値段や点数等の数値やパスワード等のランダ ...
-
-
PHPで複数の画像やテキストファイルをzipファイルとしてダウンロードさせる方法
PHPで画像ファイルやテキストファイルをzip圧縮して、ダウンロードさせたかった ...
-
-
PHPで縦横どちらかが指定の長さを超えた場合、比率を保ったままリサイズ
PHPで縦横どちらかが指定の長さを超えた場合、 比率を保ったままリサイズしたかっ ...