Docs Menu
Docs Home
/ /

확장 JSON

이 가이드 에서는 MongoDB 문서와 상호 작용할 때 확장 JSON 데이터 형식을 사용하는 방법을 학습 수 있습니다.

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

JSON, BSON 및 확장 JSON 에 대해 자세히 학습 JSON 및 BSON 리소스 및 확장 JSON MongoDB Server 수동 항목을 참조하세요.

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

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

이름
설명

확장 또는 표준

A string format that avoids loss of BSON type information during data conversions.
This format prioritizes type preservation at the loss of human-readability and interoperability with older formats.

완화

A string format that describes BSON documents with some type information loss.
This format prioritizes human-readability and interoperability at the loss of certain type information.

Shell

A string format that matches the syntax used in the MongoDB shell.
This format prioritizes compatibility with the MongoDB shell, which often uses JavaScript functions to represent types.

참고

Ruby 운전자 문자열에서 $uuid 확장 JSON 유형을 바이너리 하위 유형 4의 BsonBinary 객체 로 구문 분석합니다. $uuid 필드 분석에 대한 자세한 내용은 확장 JSON 사양의 $uuid 필드 구문 분석을 위한 특수 규칙 섹션을 참조하세요.

다음 예시에서는 각 확장 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")
}

BSON::ExtJSON.parse 메서드를 호출하여 확장 JSON 문자열을 Ruby 배열 로 읽을 수 있습니다. 이 메서드는 확장 JSON 문자열을 구문 분석하고 데이터가 포함된 배열 반환합니다.

다음 예시 parse 메서드를 사용하여 확장 JSON 문자열을 해시 배열 로 읽는 방법을 보여 줍니다.

require 'bson'
ex_json = '''[
{"foo": [1, 2]},
{"bar": {"hello": "world"}},
{"code": {
"$scope": {},
"$code": "function x() { return 1; }"
}},
{"bin": {
"$type": "80",
"$binary": "AQIDBA=="
}}
]'''
doc = BSON::ExtJSON.parse(ex_json)
puts doc.class
puts doc
{"foo" => [1, 2]}
{"bar" => {"hello" => "world"}}
{"code" => #<BSON::CodeWithScope:0x0000000123f398e0 @javascript="function x() { return 1; }", @scope={}>}
{"bin" => <BSON::Binary:0x7144 type=user data=0x01020304...>}

as_extended_json 메서드를 사용하여 확장 JSON 문자열을 쓰기 (write) 수 있습니다. 기본값 으로 이 메서드는 확장 JSON 문자열을 표준 형식으로 반환하지만 mode 인수를 전달하여 완화 형식 또는 레거시 형식을 지정할 수 있습니다.

참고

레거시 버전

레거시 형식 옵션은 Ruby 운전자 현재의 완화 및 표준 형식보다 앞선 MongoDB 확장 JSON v1 형식으로 BSON 유형을 직렬화하도록 지시합니다.

자세한 내용은 서버 매뉴얼의 MongoDB 확장 JSON v1 페이지를 참조하세요.

as_extended_json 메서드는 ArrayHash를 포함한 여러 핵심 및 표준 라이브러리 유형에 사용할 수 있습니다. 다음 예시 해시 배열 에서 표준, 완화 및 레거시 형식의 확장 JSON 문자열을 생성합니다.

require 'bson'
hash_array = [
{ "foo" => [1, 2] },
{ "bin" => BSON::Binary.new("\x01\x02\x03\x04", :user) },
{ "number" => BSON::Int64.new(42) }
]
json_string_canonical = hash_array.as_extended_json
json_string_relaxed = hash_array.as_extended_json(mode: :relaxed)
json_string_legacy = hash_array.as_extended_json(mode: :legacy)
puts "canonical:\t #{json_string_canonical}"
puts "relaxed:\t #{json_string_relaxed}"
puts "legacy:\t\t #{json_string_legacy}"
canonical: [{"foo":[{"$numberInt":"1"},{"$numberInt":"2"}]},{"bin":{"$binary":{"base64":"AQIDBA==","subType":"80"}}},{"number":{"$numberLong":"42"}}]
relaxed: [{"foo":[1,2]},{"bin":{"$binary":{"base64":"AQIDBA==","subType":"80"}}},{"number":42}]
legacy: [{"foo":[1,2]},{"bin":{"$binary":"AQIDBA==","$type":"80"}},{"number":42}]

자세한 내용은 다음 리소스를 참조하세요.

돌아가기

BSON

이 페이지의 내용