BSON ドキュメントの作成
bson_t 構造
BSON ドキュメントは bson_t を使用して作成されます 構造体。この構造は、 BSON 仕様 を使用してエンコードするために必要なロジックをカプセル化します 。コアでは、 bson_t は、 バッファ マネージャーであり、エンコーディング ルーチンのセットです。
Tip
BSON ドキュメントは、パフォーマンス ニーズや消費者の嗜好に基づいて、スタックまたはヒープに存在できます。
スタックに新しい BSON ドキュメントを作成し、 libbson を使用する場合は常に、 #include <bson/bson.h>
であることを確認してください。
bson_t b; bson_init (&b);
これにより、空のドキュメントが作成されます。 JSON では、これは{}
と同じになります。
これで、BSON ドキュメントへの項目の追加に進むことができます。 追加するフィールドのタイプに応じて、 bson_append_
のプレフィックスが付いたさまざまな関数を使用できます。 UTF-8 でエンコードされたstringを追加しましょう。
bson_append_utf8 (&b, "key", -1, "value", -1);
2 つの-1
パラメータに注意してください。 最初の は、 key
の長さ(バイト単位)がstrlen()
で決定される必要があることを示します。 あるいは、 3
という数値を渡すこともできます。 2 つ目の-1
も同じですが、 value
についても同じです。
libbson は、string リテラルを使用するときにこれを軽減するためのマイクロを提供します。 次の 2 つの追加は同一です。
bson_append_utf8 (&b, "key", -1, "value", -1); BSON_APPEND_UTF8 (&b, "key", "value");
次に、BSON ドキュメントにいくつかの異なるフィールド型を追加する例を示します。
bson_t b = BSON_INITIALIZER; BSON_APPEND_INT32 (&b, "a", 1); BSON_APPEND_UTF8 (&b, "hello", "world"); BSON_APPEND_BOOL (&b, "bool", true);
bson_init への呼び出しを省略したことに注意してください 。BSON_INITIALIZER
を指定することで、構造を基本状態に初期化する必要がなくなります。
サブドキュメントとサブ配列
サブドキュメントの作成を簡素化するには : は、親のメモリ領域を宛先バッファとして使用してサブドキュメントを構築するために使用できます。
bson_t parent = BSON_INITIALIZER; bson_t child; bson_append_document_begin (&parent, "foo", 3, &child); bson_append_int32 (&child, "baz", 3, 1); bson_append_document_end (&parent, &child); char *str = bson_as_relaxed_extended_json (&parent, NULL); printf ("%s\n", str); // Prints: { "foo" : { "baz" : 1 } } bson_free (str); bson_destroy (&parent);
サブ配列の作成を簡素化するには bson_array_Builder_t は、親のメモリ領域を宛先バッファとして使用してサブ配列を構築するために使用できます。
bson_t parent = BSON_INITIALIZER; bson_array_builder_t *bab; bson_append_array_builder_begin (&parent, "foo", 3, &bab); bson_array_builder_append_int32 (bab, 9); bson_array_builder_append_int32 (bab, 8); bson_array_builder_append_int32 (bab, 7); bson_append_array_builder_end (&parent, bab); char *str = bson_as_relaxed_extended_json (&parent, NULL); printf ("%s\n", str); // Prints: { "foo" : [ 9, 8, 7 ] } bson_free (str); bson_destroy (&parent);
簡略化された BSON C オブジェクト表記
BSON ドキュメントを手動で作成すると、単調で時間がかかる可能性があります。 BSON(BSON C Object Notation)は、宛先形式に近い形式で BSON ドキュメントを作成できるようにするために追加されました。
次の例は、BCON の使用を示しています。 フィールドの値はBCON_*
マイクロでラップされていることに注意してください。 これらは、変数プロセッサがパラメータ型を決定するのに必要です。
bson_t *doc; doc = BCON_NEW ("foo", "{", "int", BCON_INT32 (1), "array", "[", BCON_INT32 (100), "{", "sub", BCON_UTF8 ("value"), "}", "]", "}");
次のドキュメントを作成します
{ "foo" : { "int" : 1, "array" : [ 100, { "sub" : "value" } ] } }