「プログラムで変換を制するものは、システムの安定性を制する」と、本気で考えている、ユゲタです。
単一のスニペットではなく、比較的大きめのプログラムを構築する際には、小さな関数をたくさん組み合わせて使うことが多いかと思いますが、ライブラリやプラグインなどで、それぞれデータの扱い方が違うことがよくあります。
一方では、JSONデータを扱っていて、別ではXMLデータになっていたり、ホームページからの入力フォームを受け取る時は、$_POSTの連想配列に入ったデータや、GETで受け取るURLパラメータであったり、
データ・フォーマットは様々な形式で存在しますが、この中で特に相互変換が必要な事が多いのが、次の3つです。
データ配列
クエリパラメータ
JSONデータ
この3つを常に変換して使うケースが多いのですが、面倒くささも相まって、その場で変換コードを毎回作っていたんですが、改めて相互変換する特定コードをまとめておこうと思います。
あ、PHPコードでやりますんで、他の言語の希望などあれば、コメントで要望ください。
「データ配列」→「JSONデータ」
$arr = array(
"a" => 1,
"b" => 2,
"c" => 3
);
$json = json_encode($arr , JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
print_r($json);
{"a":1,"b":2,"c":3}
そもそも、PHPの基本関数で安定運用できるjson関数ですが、パラメータにつけているのは、
"JSON_UNESCAPED_UNICODE"は、2バイト文字対応で勝手にURLエンコードされるのを防ぎます。
"JSON_UNESCAPED_SLASHES"は、文字列で登録されている各種記号が勝手にエスケープ変換されるのを防げます。
「JSONデータ」→「データ配列」
$json = '{"a":1,"b":2,"c":3}';
$hash = json_decode($json , true);
print_r($hash);
Array
(
[a] => 1
[b] => 2
[c] => 3
)
json_decode関数のオプションで付けている"true"は、返ってくるデータがオブジェクトデータではなく、連想配列で返すようにしています。
個人的には、PHPのデータは全て連想配列で使うようにしているので、自分用としてこうしてますが、オブジェクトで言い方は外してよりシンプルな形で使ったほうがいいでしょう。
「URLパラメータ」→「データ配列」
$url_param = "a=1&b=2&c=3";
parse_str($url_param , $hash);
print_r($hash);
Array
(
[a] => 1
[b] => 2
[c] => 3
)
URLパラメータも基本関数で変換することができます。
PHPのマニュアルページに注意書きなどが書かれているので、使用する場合はよく読んでお使いください。
「返り値を持たない関数なので、ちゃんとresultオプションに変数を入れて使わないととんでもないことになるよ」という内容らしいです。
参考 :
https://www.php.net/manual/ja/function.parse-str.php
「データ配列」→「URLパラメータ」
$hash = array(
"a" => 1,
"b" => 2,
"c" => 3
);
$url_param = http_build_query($hash);
print_r($url_param);
a=1&b=2&c=3
URLパラメータは、encode、decodeではなく、一方通行の基本関数しかないようです。
でも、用途としては、上記のようにすると、問題なく相互変換できます。
「JSONデータ」→「URLパラメータ」
$json = '{"a":1,"b":2,"c":3}';
$hash = json_decode($json , true);
$url_param = http_build_query($hash);
print_r($url_param);
a=1&b=2&c=3
どうやら、jsonデータから、直でURLパラメータ変換んする基本関数は無いようなので、データ変換を間に挟む形にしてみました。
もはや、あとはパズルですね。
「URLパラメータ」→「JSONデータ」
$url_param = "a=1&b=2&c=3";
parse_str($url_param , $hash);title="urlParam2json.php"
$json = json_encode($hash , JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
print_r($json);
{"a":"1","b":"2","c":"3"}
説明はいらないでしょう。
でも、URLパラメータとJSONデータの変換をもっと簡単にできる方法があれば、こっそり教えて下さい。
0 件のコメント:
コメントを投稿