对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

使用扩展JSON数据

在本指南中,您可以学习;了解在与MongoDB文档交互时如何使用扩展JSON数据格式。

JSON是一种人类可读的数据格式,用于表示对象值、数组、数字、字符串、布尔值和空值。此格式仅支持BSON数据类型的子集,而MongoDB正是使用该格式来存储数据。扩展JSON格式支持更多BSON 类型,定义了一设立以 "$" 为前缀的保留键,用于表示直接对应于BSON中每种类型的字段类型信息。

MongoDB扩展JSON采用两种字符串格式来表示BSON数据。 每种格式都符合JSON RFC 并满足特定的使用案例。

下表描述了每种扩展JSON格式:

名称
说明

规范或扩展

一种 string 格式,可避免在数据转换过程中丢失 BSON 类型信息。
这种格式优先考虑类型保存,但会牺牲人类可读性以及与旧格式的互操作性。

宽松模式

一种 string 格式,用于描述 BSON 文档,但会丢失某些类型信息。
这种格式优先考虑人类可读性和互操作性,但会丢失某些类型的信息。

To learn more about JSON, BSON, and Extended JSON, see the JSON and BSON resource and Extended JSON MongoDB Server manual entry.

以下示例显示了一份包含 ObjectId、日期和以扩展JSON格式表示的长数字字段的文档。选择Canonical或Relaxed Mode标签页以查看每种扩展JSON格式的示例文档:

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

您可以使用 toRelaxedExtendedJSON() 和 toCanonicalExtendedJSON() 方法从BSON文档对象写入扩展JSON字符串。

以下示例会输出宽松 JSON 格式和规范扩展JSON格式的BSON文档:

$doc = [
'foo' => [1, 2],
'bar' => ['hello' => 'world'],
'code' => new MongoDB\BSON\Javascript('function x() { return 1; }', []),
'date' => new DateTime('2024-07-20 10:30:00'),
];
echo 'Relaxed format: ' , MongoDB\BSON\Document::fromPHP($doc)->toRelaxedExtendedJSON(), PHP_EOL;
echo 'Canonical format: ' , MongoDB\BSON\Document::fromPHP($doc)->toCanonicalExtendedJSON(), PHP_EOL;

您可以通过调用 json_decode() 方法将扩展JSON字符串读入PHP值,该方法将扩展JSON转换为PHP大量或对象。 将以下参数传递给 json_decode():

  • 要读取的扩展JSON字符串。

  • 布尔值,表示是否要返回大量值。如果设立为 false,该方法将返回一个对象值。

以下示例将扩展JSON字符串值转换为PHP大量:

$ejsonStr = '{
"foo": [
{ "$numberInt": "1" },
{ "$numberInt": "2" }
],
"bar": { "hello": "world" },
"code": {
"$code": "function x() { return 1; }",
"$scope": {}
},
"bin": { "$binary": { "base64": "AQIDBA==", "subType": "00" } }
}';
$decodedJson = json_decode($ejsonStr, true);
print_r($decodedJson);

要学习;了解有关本页所讨论方法的更多信息,请参阅以下PHP扩展API文档: