先日から数年振りにC言語でコーディングしている。 その前はrailsだったのでコードを書く量が多くて、面倒な上、このうえなし。 それにしても、ポインタ使うの久しぶりだわ。
そんな事はどうでもいいとして。 その作成中のソフトで、外部から設定ファイルを読み込む仕様があったので、拡張性等も考慮しjson形式で定義することにした。 jsonを扱えるC言語ライブラリは、いくつかあるのだが、今回はJSON-Cをチョイス。 だが、JSON-Cのサンプルコードがググってもなかなか無い(他のライブラリでも似たようなものだが) それはそれ、こことか参考にしながら、とりあえずjsonフォーマットが自由自在にパースできるところまできた。 これで何とかなりそう。
ついでにテストで作ったコードを晒してみる。
こんな情報を知りたがる人がいるかどうか不明だが、ないよりは良いだろうということで。 あ、そうそう、コンパイラはg++で。
#include
#include
#include
#include "json.h"
int main(int argc, char** argv) {
struct json_object *obj;
struct json_object *srv, *cli;
int i;
char buf[] = "{"SERVER":{"host": "192.168.0.2", "port":1287},"CLIENT":[["192.168.0.3",1001,"CLIENT1"],["192.168.0.4",1002,"CLIENT2"]]}";
int len;
mc_set_debug(1);
obj = json_tokener_parse(buf);
printf("new_obj.to_string()=%sn", json_object_to_json_string(obj));
srv =json_object_object_get(obj, "SERVER");
cli =json_object_object_get(obj, "CLIENT");
printf("srv.to_string()=%sn", json_object_to_json_string(srv));
printf("cli.to_string()=%sn", json_object_to_json_string(cli));
json_object_object_foreach(srv, key,val)
{
printf("t%s: %sn",key,json_object_to_json_string(val));
}
len = json_object_array_length(cli);
printf("cli.length: %dn",len);
struct json_object *ary;
struct array_list *ary_list;
for (i = 0; i < len; i++)
{
ary = json_object_array_get_idx(cli, i);
printf("ary.to_string()=%sn", json_object_to_json_string(ary));
char *str;
int ary_len;
ary_list = json_object_get_array(ary);
ary_len = array_list_length(ary_list);
printf("ary_length: %dn",ary_len);
char *ipaddr;
ipaddr = json_object_get_string((struct json_object *)array_list_get_idx(ary_list,0));
printf("ipaddr: %sn",ipaddr);
int portno;
portno = json_object_get_int((struct json_object *)array_list_get_idx(ary_list,1));
printf("portno: %dn",portno);
char *pcname;
pcname = json_object_get_string((struct json_object *)array_list_get_idx(ary_list,2));
printf("pcname: %sn",pcname);
}
return (EXIT_SUCCESS);
}