Docs Menu
Docs Home
/ / /
C 드라이버
/ /

BSON 문서 만들기

이 페이지의 내용

  • bson_t 구조
  • 하위 문서 및 하위 배열
  • 간소화된 BSON C 객체 표기법

BSON 문서는 bson_t 를 사용하여 생성됩니다. 구조입니다. 이 구조는 BSON 사양 을 사용하여 인코딩에 필요한 로직을 캡슐화합니다. . 핵심은bson_t 버퍼 관리자이자 인코딩 루틴 설정하다 입니다.

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);

두 개의 -1 매개변수를 확인하세요. 첫 번째는 key 의 길이(바이트)가 strlen() 로 결정되어야 함을 나타냅니다. 또는 숫자 3 을 전달했을 수도 있습니다. 두 번째 -1 도 마찬가지이지만 value 도 마찬가지입니다.

Libbson은 string 리터럴을 사용할 때 번거로운 작업을 줄일 수 있도록 매크로를 제공합니다. 다음 두 추가 항목은 동일합니다.

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_append_document_begin 상위 문서의 메모리 리전 을 대상 버퍼로 사용하여 하위 문서를 빌드 하는 데 사용할 수 있습니다.

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 문서를 수작업으로 생성하는 것은 지루하고 시간이 많이 소요될 수 있습니다. 대상 형식에 더 가까운 형식으로 BSON 문서를 생성할 수 있도록 BCON 또는 BSON C 객체 표기법이 추가되었습니다.

다음 예제에서는 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" } ] } }

돌아가기

C 프로그램에서 libbson 사용