개요
이 가이드 에서는 C 운전자 에서 확장 JSON 형식을 사용하는 방법을 학습 수 있습니다.
JSON 은 객체, 배열, 숫자, 문자열, 부울 및 null 값을 나타내는 데이터 형식입니다. 이 형식은 MongoDB 데이터를 저장 데 사용하는 형식인 BSON 데이터 유형의 하위 집합만 지원합니다. 확장 JSON 형식은 더 많은 BSON types을 지원하며, BSON의 각 유형에 직접적으로 대응하는 필드 유형 정보를 나타내기 위해 '$' 접두사가 붙은 예약된 키를 정의합니다.
이러한 형식의 차이점에 대한 자세한 내용은 JSON 및 BSON 리소스를 참조하세요.
확장 JSON 형식
MongoDB 확장 JSON은 BSON 데이터를 나타내는 다양한 string 형식 기능을 제공합니다. 다양한 형식 각각은 JSON RFC를 준수하며 특정 사용 사례를 충족합니다.
다음 표에서는 각 형식에 대해 설명합니다.
이름 | 설명 |
|---|---|
확장 | 표준(canonical) 형식이라고도 하는 이 JSON 표현은 BSON 유형 정보의 손실을 방지합니다. |
완화 모드 | 일부 유형 정보 손실이 있는 BSON 문서를 설명하는 JSON 표현입니다. |
Shell | 더 이상 사용되지 않습니다. MongoDB Shell에서 사용되는 구문과 일치하는 JSON 표현입니다. |
엄격한 | 사용되지 않음. 이 표현은 모든 JSON 구문 분석기가 유형 정보를 읽을 수 있는 JSON RFC를 완벽히 준수하는 레거시 형식입니다. |
참고
드라이버 $uuid 확장 JSON 유형을 문자열에서 하위 유형 4 (BSON_SUBTYPE_UUID)의 바이너리 데이터로 구문 분석합니다. $uuid 필드 분석에 대한 자세한 내용은 $uuid 필드 구문 분석을 위한 특별 규칙을 참조하세요.
이러한 형식에 대한 자세한 내용은 다음 리소스를 참조하세요.
JSON RFC 공식 설명서
MongoDB 확장 JSON 서버 수동 입력
BSON_SUBTYPE_UUID API 문서
확장 JSON 예시
다음 예시에서는 각 확장 JSON 형식으로 표시되는 ObjectId, 날짜, 긴 숫자 필드가 포함된 문서를 보여 줍니다. 원하는 형식의 예시 탭을 클릭합니다.
{ "_id": { "$oid": "573a1391f29313caabcd9637" }, "createdAt": { "$date": { "$numberLong": "1601499609" }}, "numViews": { "$numberLong": "36520312" } }
{ "_id": { "$oid": "573a1391f29313caabcd9637" }, "createdAt": { "$date": "2020-09-30T18:22:51.648Z" }, "numViews": 36520312 }
{ "_id": ObjectId("573a1391f29313caabcd9637"), "createdAt": ISODate("2020-09-30T18:22:51.648Z"), "numViews": NumberLong("36520312") }
{ "_id": { "$oid": "573a1391f29313caabcd9637" }, "createdAt": { "$date": 1601499609 }, "numViews": { "$numberLong": "36520312" } }
확장 JSON 읽기
BSON 함수 사용
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 문서를 참조하세요.
BSON JSON Reader 사용
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);
507f1f77bcf86cd799439011 is type: ObjectId 4794261 is type: int64_t
자세한 내용은 다음 API 설명서를 참조하세요.
확장 JSON 쓰기
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 document doc = 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 mode opts = bson_json_opts_new (BSON_JSON_MODE_RELAXED, BSON_MAX_LEN_UNLIMITED); // Convert to Extended JSON json_str = bson_as_json_with_opts (doc, NULL, opts); printf ("%s\n", json_str); // Cleanup bson_free (json_str); bson_json_opts_destroy (opts); bson_destroy (doc);
{ "_id" : { "$oid" : "507f1f77bcf86cd799439012" }, "myNumber" : 11223344 }
자세한 내용은 bson_as_json_with_opts() API 설명서를 참조하세요.
API 문서
확장 JSON 데이터로 작업하는 데 사용할 수 있는 함수 및 유형에 대해 자세히 학습 다음 API 설명서를 참조하세요.