Tiny-jsonは、Cで書かれ、埋め込まれたシステムに適した用途が広く使いやすいJSONパーサーです。速く、堅牢で、ポータブルです。
トークネイザーだけではありません。 JSONデータに文字列形式でアクセスするか、パフォーマンスを失うことなく、C型変数としてプリミティブ値を直接取得できます。
JSONフィールドに1つにアクセスしたり、名前で値を取得したりできます。これにより、多くのソースコードラインと開発時間を節約できます。
JSON文字列を作成する必要がある場合は、https://github.com/rafagafe/json-makerにアクセスしてください。
JSONテキスト文字列を解析する場合、JSON_T構造をリンクすることによりツリーが作成されます。このツリーをナビゲートまたはクエリすることは、提供されたAPIを使用して非常に簡単です。
メモリの使用量の減少と高速処理を維持するために、文字列はコピーされません。 JSON要素の値を要求すると、元のJSON文字列への参照が返されます。
データの処理を容易にするために、返された文字列はヌル終了します。これは、ヌル文字をコンマ、ブラケット、ブレース、引用符などのJSONコントロールキャラクターに設定することで達成されます。
Tiny-json APIには2つのタイプがあります。 jsonType_tは、可能なすべてのJSONフィールドタイプの列挙です。 json_tは、知る必要のない内部データを含む構造です。
typedef enum {
JSON_OBJ , JSON_ARRAY , JSON_TEXT , JSON_BOOLEAN ,
JSON_INTEGER , JSON_REAL , JSON_NULL
} jsonType_t ; JSON文字列を解析するにはjson_create()を使用します。 JSONフィールドを割り当てるために、 json_tの配列を渡します。 JSON文字列がフォーミングされている場合、または配列よりも多くのフィールドがある場合、この関数はnullポインターを返します。
enum { MAX_FIELDS = 4 };
json_t pool [ MAX_FIELDS ];
char str [] = "{ "name": "peter", "age": 32 }" ;
json_t const * parent = json_create ( str , pool , MAX_FIELDS );
if ( parent == NULL ) return EXIT_FAILURE ;その名前でフィールドを取得するにはjson_getProperty()を使用します。フィールドが存在しない場合、関数はnullポインターを返します。フィールドのタイプを取得するにはjson_getType()を使用します。
json_t const * namefield = json_getProperty ( parent , "name" );
if ( namefield == NULL ) return EXIT_FAILURE ;
if ( json_getType ( namefield ) != JSON_TEXT ) return EXIT_FAILURE ;文字列形式でフィールドの値を取得するにはjson_getValue()を使用します。常に有効なnull-cheminated文字列を返します。
char const * namevalue = json_getValue ( namefield );
printf ( "%s%s%s" , "Name: '" , namevalue , "'.n" );プリミティブフィールドの場合、特定の関数を使用して、フィールド値をCタイプ、fi json_getInteger()として直接取得するか、 json_getValue()を使用してテキスト形式で値を取得できます。
json_t const * agefield = json_getProperty ( parent , "age" );
if ( agefield == NULL ) return EXIT_FAILURE ;
if ( json_getType ( agefield ) != JSON_INTEGER ) return EXIT_FAILURE ;
int64_t agevalue = json_getInteger ( agefield );
printf ( "%s%lld%s" , "Age: '" , agevalue , "'.n" );
char const * agetxt = json_getValue ( agefield );
printf ( "%s%s%s" , "Age: '" , agetxt , "'.n" );ネストされたJSONオブジェクトと配列の使用方法については、例-01.cを参照してください。