[PHP] json_encodeで見やすく整形する

2015年5月3日

PHP Tips プログラミング

サーバーサイドで保持するデータをJSONで保存する事が増えました。 今までは、grep,splitやawkを使ってデータを読み書きする場合は、csv形式にするしか無かったんですが、jqコマンドなどが充実してきたので、ようやく、keyを付けたデータとして扱えるようになってきました。 rubyやpythonなどでは、当たり前のようにJSONやYAMLなどが使われているので、PHPでは、ver5.3以降にJSON機能がどんどん進化しているようですね。

マニュアルサイト

http://php.net/manual/ja/json.constants.php

JSON形式での2パターンの保存方式

NoSQLとしてデータをファイルに直接保存するのですが、JSON形式のデータ保存は大きく2パターン仕様として考えられます。

1.見易いJSONデータとして保存

1ファイルにおける設定データとして利用できます。 運用時においても、データファイルをエディタで直接開いて中身の確認や書き換えなどが行えるので、便利に使えます。 { "a":1, "b":2, "c":3 }

2.レコード形式

{"a":1,"b":2,"c":3} {"d":4,"e":5,"f":6} {"g":7,"h":8,"i":9}

PHPの連想配列とオブジェクトデータをJSONデータに変換

通常変換

<?php $data = array( "a"=>1, "b"=>2, "c"=>3 ); $json = json_encode($data); print_r($json); #結果 {"a":1,"b":2,"c":3}

見やすく変換

$data = array( "a"=>1, "b"=>2, "c"=>3 ); $json = json_encode($data,JSON_PRETTY_PRINT); print_r($json); # 結果 { "a": 1, "b": 2, "c": 3 }

用途に応じて指定変更

改めてメリットとデメリットを考慮しないといけません。 1行JSONにする場合は、データレコードとして扱えますが、データの上書きなどは、書き込みが多い場合に排他処理などを確実にやらないと、データを紛失してしまうおそれも有ります。 その点、1ファイルで1JSONデータにすると、同時書き込みをしない限りデータ紛失のおそれはありません。 ただ、この場合のデメリットは、1レコード1ファイルになるので、レコード数の多いシステムの場合は非常にサーバーでのファイル管理とバックアップなどがとても苦しくなってしまいます。 1行レコード方式で、追記型にして、後書き有効にする事も可能ですが、この場合は、データ検索精度が落ちてしまうので、どのパターンもメリット・デメリットが存在するので、そのシステムに合ったパターンをチョイスしないといけません。 他にもパターンがあるかもしれないので、NoSQLのデータ扱いをもう少し研究してみたいと思います。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。