wafuの技術

技術習得の努力メモです。

janssonを使ってみた。

JSONの処理は、picojsonを使っていましたが、いろいろ悩むことがあり、janssonに変更中です。

janssonは、APIのドキュメントがあるのが良いです。

 

■ヘッダ
#include <jansson.h>

■ライブラリ
jansson.lib


■ファイルを開く
    json_t *result = json_load_file("json.db", 0, &error);
    if (result == NULL) {
        fputs(error.text, stderr);
        return 0;
    }


■オブジェクトを開く
    json_t *JO1 = json_object_get(result, "roots");
    if (JO1 == NULL) {
        printf("JO1 is NULL\n");
        return 0;
    }


■オブジェクトの確認
    //オブジェクトの判定test
    if (json_is_null(JO2) == 1){
        printf("NULL\n");
    }
    if (json_is_object(JO2) == 1){
        printf("object\n");
    }
    if (json_is_integer(JO2) == 1){
        printf("integer\n");
    }
    if (json_is_array(JO2) == 1){
        printf("array\n");
    }
    if (json_is_string(JO2) == 1){
        printf("string\n");
    }


■Arrayの値の読み出し
    json_t *JO3;
    JO3 = json_object_get(JO2, "children");
    if (JO3 == NULL) {
        printf("JO3 is NULL\n");
        return 0;;
    }
    json_t *JO4;
    json_array_foreach(JO3, i, JO4) {
    printf("%s/%s: %s\n",
        json_string_value(json_object_get(JO4, "name")),
        json_string_value(json_object_get(JO4, "url")));
    }


■オブジェクトの一覧をループ
    keyに名前が入り、valueが新しいオブジェクト

    json_t *value;
    const char *key;
    json_object_foreach(JObj,key,value){
        printf("key:%s\n",key);
        
    }