Windows Subsystem for Linux(WSL)環境で、C言語でJSONを扱うライブラリ「jansson」の使い方です!
インストールから読み込むロジック作成→実行までの流れです!
janssonのダウンロード
ファイルをダウンロードする方法
- wgetコマンドで、Linux上にダウンロードする
- Windowsでダウンロードして、Linuxのフォルダに入れる
のどちらかになると思います。
Linux上のものは、基本的にはLinux上でのみいじるべきだとは思うので、2つ目の方法は亜流と思われます。
wgetコマンドからダウンロードする
wgetコマンドで、janssonのファイルをダウンロードします。
任意のパスに移動して、このコマンドを実行しましょう!
ちなみにURLはダウンロード先のURLとなります。
コレを試したとき(10/12)時点での、最新版「2.11」をダウンロードします。
状況に応じてURLは変更してください!
$ wget http://www.digip.org/jansson/releases/jansson-2.11.tar.gz
ちなみにURLは、Windows側のブラウザから、対象のURLをコピーしてきました。
面倒だったのでこの方が早いと思ったので。
実行するとこんな感じで表示されます。
実行時の出力を表示
$ wget http://www.digip.org/jansson/releases/jansson-2.11.tar.gz --2018-10-12 15:49:18-- http://www.digip.org/jansson/releases/jansson-2.11.tar.gz Resolving www.digip.org (www.digip.org)... 91.232.156.81, 91.232.156.82 Connecting to www.digip.org (www.digip.org)|91.232.156.81|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 483686 (472K) [application/x-gzip] Saving to: ‘jansson-2.11.tar.gz’ jansson-2.11.tar.gz 100%[==============================================>] 472.35K 231KB/s in 2.0s 2018-10-12 15:49:21 (231 KB/s) - ‘jansson-2.11.tar.gz’ saved [483686/483686]
ちゃんとファイルがダウンロードされましたね。
$ ll total 512 drwxrwxrwx 1 user user 4096 Oct 12 15:49 ./ drwxrwxrwx 1 user user 4096 Oct 12 15:48 ../ -rw-rw-rw- 1 user user 483686 Feb 12 2018 jansson-2.11.tar.gz
Windowsからアクセスする場合
Windowsから入れる場合、まずはファイルをダウンロードしましょう。
ここからファイルをダウンロード
最新のものでOKかと。
今回は「jansson-2.11.tar.gz」をダウンロード。
あとはエクスプローラからファイルを突っ込み、権限を付与して使用します。
詳しくはコチラの記事を参考にしてください。
インストール
まずはファイルを展開します。
$ tar zxf jansson-2.11.tar.gz
ここを参考にインストールしていきます。
Getting Started — Jansson 2.8 documentation
まず圧縮ファイルを展開すると、「jansson-2.11ディレクトリ」が作成されるので入ります。
cd jansson-2.11
次にこれらのコマンドを順番に叩きます。
$ ./configure $ make $ make check $ make install
これで準備OK!
実装
それではjsonファイルの作成と、janssonを使ったJSONファイル読込みを作っていきましょう!
一通りの情報はコチラから仕入れることができます。
Jansson Documentation — Jansson 2.8 documentation
jsonファイル
このような簡素なJSONファイルを用意しました。
{ "num": 5, "xx": 8 }
jsonフォーマットは、この辺りを参照しました。
ソースファイル
JSONファイルから各キーの値を取得して、表示します。
#include <stdio.h> #include <jansson.h> int main(void) { // JSONオブジェクトを入れる変数 json_error_t error; json_t* root; // 読み込んだデータを入れる変数 int num; int xx; // JSONファイルを読み込む root = json_load_file("./data.json", 0, &error); // NULL=読込み失敗 if ( root == NULL ) { printf("[ERR]json load FAILED\n"); return 1; } // "num"という名称のオブジェクトを取得し // 値をint型として取得する num = json_integer_value(json_object_get(root, "num")); printf("num: %d\n", num; // "xx"という名称のオブジェクトを取得し // 値をint型として取得する xx = json_integer_value(json_object_get(root, "xx")); printf("xx: %d\n", xx); return 0; }
Makefile
ついでにMakefileも作ってみました。
「-ljansson」オプションが必須なので忘れずに設定しましょう!
OUTPUT = pg CFLAGS = -Wall CC = gcc $(OUTPUT): main.c $(CC) -o $(OUTPUT) main.c -ljansson clean: rm -f *.o $(OUTPUT) all: clean writertdb main $(OUTPUT)
コンパイル
それではコンパイルです。
makeファイルを作っている場合、そのままmake。
$ make
makeがなければ、コマンドを作成して実行します。
$ gcc -o pg main.c -ljansson
実行
作成されたプログラムを実行すると……
無事2つの値が表示されましたね!
$ ./pg num: 5 xx: 8
APIリファレンス
janssonのその他のAPIがみたい!
という場合はコチラを参照してください。
API Reference — Jansson 2.8 documentation
あとがき
ということでjanssonを使って、JSONファイルをC言語で読む方法でした。
インストールさえしちゃえば、思った以上に手軽に使えたので、かなり良かったです!
もうiniファイルとかいう遺物に依存しなくてもよくなるんじゃ……