AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.

확장 JSON 데이터로 작업하기

이 가이드 에서는 C 운전자 에서 확장 JSON 형식을 사용하는 방법을 학습 수 있습니다.

JSON 은 객체, 배열, 숫자, 문자열, 부울 및 null 값을 나타내는 데이터 형식입니다. 이 형식은 MongoDB 데이터를 저장 데 사용하는 형식인 BSON 데이터 유형의 하위 집합만 지원합니다. 확장 JSON 형식은 더 많은 BSON types을 지원하며, BSON의 각 유형에 직접적으로 대응하는 필드 유형 정보를 나타내기 위해 '$' 접두사가 붙은 예약된 키를 정의합니다.

이러한 형식의 차이점에 대한 자세한 내용은 JSON 및 BSON 리소스를 참조하세요.

MongoDB 확장 JSON은 BSON 데이터를 나타내는 다양한 string 형식 기능을 제공합니다. 다양한 형식 각각은 JSON RFC를 준수하며 특정 사용 사례를 충족합니다.

다음 표에서는 각 형식에 대해 설명합니다.

이름
설명

확장

표준(canonical) 형식이라고도 하는 이 JSON 표현은 BSON 유형 정보의 손실을 방지합니다.
이 형식은 가독성 및 기존 형식과의 상호 운영성을 포기하고 유형 보존을 우선시합니다.

완화 모드

일부 유형 정보 손실이 있는 BSON 문서를 설명하는 JSON 표현입니다.
이 형식은 특정 유형 정보가 손실될 경우 사람의 가독성과 상호 운용성을 우선시합니다.

Shell

더 이상 사용되지 않습니다. MongoDB Shell에서 사용되는 구문과 일치하는 JSON 표현입니다.
이 형식은 종종 JavaScript 함수를 사용하여 유형을 나타내는 MongoDB Shell과의 호환성을 우선시합니다.
레거시 API는 이 형식을 사용합니다.

엄격한

사용되지 않음. 이 표현은 모든 JSON 구문 분석기가 유형 정보를 읽을 수 있는 JSON RFC를 완벽히 준수하는 레거시 형식입니다.
레거시 API는 이 형식을 사용합니다.

참고

드라이버 $uuid 확장 JSON 유형을 문자열에서 하위 유형 4 (BSON_SUBTYPE_UUID)의 바이너리 데이터로 구문 분석합니다. $uuid 필드 분석에 대한 자세한 내용은 $uuid 필드 구문 분석을 위한 특별 규칙을 참조하세요.

이러한 형식에 대한 자세한 내용은 다음 리소스를 참조하세요.

다음 예시에서는 각 확장 JSON 형식으로 표시되는 ObjectId, 날짜, 긴 숫자 필드가 포함된 문서를 보여 줍니다. 원하는 형식의 예시 탭을 클릭합니다.

{ "_id": { "$oid": "573a1391f29313caabcd9637" }, "createdAt": { "$date": { "$numberLong": "1601499609" }}, "numViews": { "$numberLong": "36520312" }}

bson_new_from_json() 함수를 호출하여 확장 JSON string을 BSON 문서 로 읽을 수 있습니다. 이 함수는 확장 JSON string을 구문 분석하고 데이터가 포함된 bson_t 구조를 반환합니다.

다음 예시 예시 확장 JSON 문자열을 bson_t 문서 로 읽는 방법을 보여줍니다.

/* Read Extended JSON string to BSON */const char *ejson_str = "{ \"_id\": { \"$oid\": \"507f1f77bcf86cd799439011\"}," "\"myNumber\": {\"$numberLong\": \"4794261\" }}";bson_error_t error;bson_t *doc = bson_new_from_json ((const uint8_t *)ejson_str, -1, &error);

자세한 내용은 bson_new_from_json() 및 bson_as_canonical_extended_json() API 문서를 참조하세요.

JSON BSON 으로 변환하기 위한 스트리밍 인터페이스를 제공하는 bson_json_reader_t 유형을 사용하여 확장 JSON 문자열을 구문 분석할 수도 있습니다. 이는 여러 JSON 문서를 처리 하거나 구문 분석 프로세스 더 잘 제어해야 할 때 특히 유용합니다.

다음 코드 예시 bson_json_reader_t 를 사용하여 확장 JSON 문자열을 BSON 문서 로 변환하는 방법을 보여줍니다.

const char *ejson_str = "{ \"_id\": { \"$oid\": \"507f1f77bcf86cd799439011\"}," "\"myNumber\": {\"$numberLong\": \"4794261\" }}";bson_json_reader_t *reader;bson_error_t error;bson_t doc = BSON_INITIALIZER;int ret; reader = bson_json_data_reader_new (false, 0);bson_json_data_reader_ingest (reader, (const uint8_t *)ejson_str, strlen (ejson_str)); ret = bson_json_reader_read (reader, &doc, &error);if (ret > 0) { bson_iter_t iter; if (bson_iter_init (&iter, &doc)) { while (bson_iter_next (&iter)) { const char *key = bson_iter_key (&iter); if (strcmp (key, "_id") == 0 && BSON_ITER_HOLDS_OID (&iter)) { const bson_oid_t *oid = bson_iter_oid (&iter); char oid_str[25]; bson_oid_to_string (oid, oid_str); printf ("%s is type: ObjectId\n", oid_str); } if (strcmp (key, "myNumber") == 0 && BSON_ITER_HOLDS_INT64 (&iter)) { int64_t number = bson_iter_int64 (&iter); printf ("%ld is type: int64_t\n", (long)number); } } }} else if (ret < 0) { printf ("Error: %s\n", error.message);} bson_json_reader_destroy (reader);bson_destroy (&doc);

자세한 내용은 다음 API 설명서를 참조하세요.

경고

JSON을 BSON으로 변환하기 전에 신뢰할 수 없는 입력을 검증하세요

JSON string을 BSON으로 변환하고 그 결과 BSON을 쿼리, 업데이트 또는 명령에 사용하면, 공격자가 연산자 또는 예상치 못한 필드 값을 삽입하여 작업의 의미를 변경할 수 있습니다. 이 위험은 JSON이 사용자, API 요청 또는 다른 신뢰할 수 없는 소스에서 유래할 때 가장 높습니다.

변환 전 입력 유효성 검사에 대해 자세히 알아보려면 JSON을 BSON으로 변환하기 전에 신뢰할 수 없는 입력 유효성 검사를 참조하세요.

bson_as_json_with_opts() 함수를 호출하여 BSON 문서 확장 JSON string으로 쓰기 (write) 수 있습니다. 이 함수는 bson_t 문서 출력 형식을 지정하는 옵션이 있는 확장 JSON 문자열로 변환합니다.

다음 예시 BSON 문서 생성하고 이를 완화된 형식의 확장 JSON 으로 출력하는 방법을 보여줍니다.

bson_t *doc;bson_oid_t oid;bson_json_opts_t *opts;char *json_str; // Create a BSON documentdoc = bson_new ();bson_oid_init_from_string (&oid, "507f1f77bcf86cd799439012");bson_append_oid (doc, "_id", -1, &oid);bson_append_int32 (doc, "myNumber", -1, 11223344); // Configure JSON output options for Relaxed modeopts = bson_json_opts_new (BSON_JSON_MODE_RELAXED, BSON_MAX_LEN_UNLIMITED); // Convert to Extended JSONjson_str = bson_as_json_with_opts (doc, NULL, opts);printf ("%s\n", json_str); // Cleanupbson_free (json_str);bson_json_opts_destroy (opts);bson_destroy (doc);

자세한 내용은 bson_as_json_with_opts() API 설명서를 참조하세요.

확장 JSON 데이터로 작업하는 데 사용할 수 있는 함수 및 유형에 대해 자세히 학습 다음 API 설명서를 참조하세요.