ジェーソンとの格闘

とりあえず構文がミスしている場合そのまま内容を参照しようとするとセグメンテーションエラーする。都合よくチェッカーが付いていたのでそいつで検査

json_object *j_obj = json_tokener_parse(data);
if (is_error(j_obj) ) return;

データをパーサに通すとエラーでNULLが帰ってくるとおもいきや、エラーコード?のようなアドレスが帰ってくるので、is_errorを通すとエラー判定ができた。

昨日のパース後の処理ではキーワードから値を探すのではなく、入っているテーブルを上からなめていく方法だったので、今度はキーワードからデータを取り出す方法

{"call":"get","id":12}
というような構文をdataに突っ込む場合

json_object *j_obj = json_tokener_parse(data);
if (is_error(j_obj) ) return;

json_object *j_call = json_object_object_get(j_obj,"call");

if(strncmp( json_object_get_string(j_call) , "get",3) == 0){
	json_object *j_id = json_object_object_get(j_obj,"id");
	if(j_id) printf("ID = %d\n",json_object_get_int(j_id));
}

ちょっとどんくさいけど、こんな感じで取り出せた

とりあえず出し入れはできましたが、データの構造設計が頭の痛い問題です・・・