著者:後藤 大地
プログラムでJSONデータを自動処理する場合、フォーマットはどうでもよい。ただし、人間が読むとなると、フォーマットを変換して整理する必要がある。整理されていないJSONデータは、人間にはあまりにも読みにくいからだ。自分の読みやすいようにJSONデータを変換するコマンドといったものが、Janssonライブラリを利用すると簡単に開発できる。これが今回のテーマである。
シェルスクリプトマガジン Vol.56は以下のリンク先でご購入できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "Image": { "幅": 800, "高さ": 600, "タイトル": "View from 15th Floor", "サムネイル": { "Url":"http://www.example.com/image/481989943", "高さ": 125, "幅": 100 }, "アニメーション" : false, "IDs": [116, 943, 234, 38793] } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[ { "精度": "zip", "緯度": 37.7668, "経度": -122.3959, "住所": "", "都市": "SAN FRANCISCO", "州": "CA", "郵便番号": "94107", "国": "US" }, { "精度": "zip", "緯度": 37.371991, "経度": -122.026020, "住所": "", "都市": "SUNNYVALE", "州": "CA", "郵便番号": "94085", "国": "US" } ] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <unistd.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <jansson.h> int main(int argc, char *argv[]) { char buf[1024 * 1024]; int fd; // JSONデータを読み込み fd = open(argv[1], O_RDONLY); read(fd, buf, 1024 * 1024 - 1); close(fd); // JSONデータをパース json_error_t error; json_t *root = json_loads(buf, 0, &error); // JSONデータをエンコードして標準出力へ出力 json_dump_file(root, "/dev/stdout", 0); // JSONメモリー解放 json_decref(root); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <unistd.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <jansson.h> int main(int argc, char *argv[]) { char buf[1024 * 1024]; int fd; // JSONデータを読み込み fd = open(argv[1], O_RDONLY); read(fd, buf, 1024 * 1024 - 1); close(fd); // JSONデータをパース json_error_t error; json_t *root = json_loads(buf, 0, &error); // JSONデータをエンコードして標準出力へ出力 json_dump_file(root, "/dev/stdout", JSON_INDENT(1)| JSON_COMPACT| JSON_SORT_KEYS| JSON_REAL_PRECISION(10)); // JSONメモリー解放 json_decref(root); return 0; } |