lisz-works

技術と興味の集合体

C言語でJSONを使おう!Windows Subsystem for Linux(WSL)で実行してみる

【スポンサーリンク】

 プログラムのソースコード

Windows Subsystem for Linux(WSL)環境で、C言語でJSONを扱うライブラリ「jansson」の使い方です!

インストールから読み込むロジック作成→実行までの流れです!

janssonのダウンロード

ファイルをダウンロードする方法

  1. wgetコマンドで、Linux上にダウンロードする
  2. 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から入れる場合、まずはファイルをダウンロードしましょう。

ここからファイルをダウンロード

Index of /jansson/releases

最新のものでOKかと。

今回は「jansson-2.11.tar.gz」をダウンロード。

あとはエクスプローラからファイルを突っ込み、権限を付与して使用します。
詳しくはコチラの記事を参考にしてください。

www.lisz-works.com

インストール

まずはファイルを展開します。

$ 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フォーマットは、この辺りを参照しました。

qiita.com

ソースファイル

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ファイルとかいう遺物に依存しなくてもよくなるんじゃ……