MongoDB 文档数据格式:BSON
<p> </p><h1 id="document-data-format--bson" class="contains-headerlink"><span>文档数据格式:BSON </span></h1>
<h2 id="overview" class="contains-headerlink"><span>概览</span></h2>
<p><span>在本指南中,您可以了解 BSON 数据格式、MongoDB 如何使用它以及如何独立于 MongoDB Java 驱动程序安装 BSON 库。</span></p>
<h2 id="bson-data-format" class="contains-headerlink"><span>BSON 数据格式</span></h2>
<p>BSON<span><span>或二进制 JSON 是 MongoDB 用于组织和存储数据的数据格式。</span><span>此数据格式包括所有 JSON 数据结构类型,并增加了对日期、不同大小整数、ObjectId 和二进制数据等类型的支持。</span><span>有关受支持类型的完整列表,请参阅 </span></span>BSON 类型<span>服务器手册页。</span></p>
<p><span>二进制格式不是人类可读的,但您可以使用 </span>Java BSON 库<span><span>将其转换为 JSON 表示。</span><span>您可以在我们关于</span></span>JSON 和 BSON 的<span><span>文章中阅读有关这些格式之间关系的更多信息</span><span>。</span></span></p>
<h2 id="mongodb-and-bson" class="contains-headerlink"><span>MongoDB 和 BSON </span></h2>
<p><span>使用 BSON 库的 MongoDB Java 驱动程序允许您使用实现</span>BSON 接口<span><span>的对象类型之一来处理 BSON 数据 </span><span>,包括:</span></span></p>
<ul>
<li>文档<span>(BSON 库包)</span></li>
<li>BsonDocument<span>(BSON 库包)</span></li>
<li>RawBsonDocument<span>(BSON 库包)</span></li>
<li>JsonObject<span>(BSON 库包)</span></li>
<li>BasicDBObject<span>(Java 驱动程序包)</span></li>
</ul>
<p><span>有关使用这些对象类型的更多信息,请参阅我们的 </span>文档指南<span>。</span></p>
<h2 id="install-the-bson-library" class="contains-headerlink"><span>安装 BSON 库</span></h2>
<p><span><span>这些说明向您展示了如何将 BSON 库作为依赖项添加到您的项目中。</span><span>如果您将 MongoDB Java 驱动程序作为依赖项添加到您的项目中,则可以跳过此步骤,因为 BSON 库已作为驱动程序的必需依赖项包含在内。</span><span>有关如何将 MongoDB Java 驱动程序作为依赖项添加到您的项目的说明,请参阅</span><span>我们的快速入门指南</span><span>的 </span></span>驱动程序安装<span>部分。</span></p>
<p><span>我们建议您使用</span>Maven<span>或 </span>Gradle<span><span>构建自动化工具来管理项目的依赖项。</span><span>从以下选项卡中选择以查看该工具的依赖项声明:</span></span></p>
<div> </div>
<div class="leafygreen-ui-7jagd2">
<div class="leafygreen-ui-t0i70x"><button id="tab-0" class="leafygreen-ui-evvyvf" tabindex="0" name=""><span>Maven</span></button></div>
<div class="leafygreen-ui-t0i70x">
<p>以下代码段显示了文件<code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">dependencies</code>部分中的依赖项声明 <code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">pom.xml</code>。</p>
<div class="cnblogs_code">
<pre><dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>4.3.2</version>
</dependency>
</dependencies></pre>
</div>
<p> </p>
</div>
<div class="leafygreen-ui-t0i70x"><button id="tab-1" class="leafygreen-ui-1ndpd7m" tabindex="-1" name=""><span>Gradle</span></button></div>
<div>
<div id="tab-panel-0" class="leafygreen-ui-lod8ln">
<p><span>以下代码段显示了文件中</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">dependencies</code><span><span>对象中</span><span>的依赖项声明 </span></span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">build.gradle</code><span>。</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">dependencies {
compile </span>'org.mongodb:bson:4.3.2'<span style="color: rgba(0, 0, 0, 1)">
}</span></pre>
</div>
<p> </p>
</div>
</div>
</div>
<p><span>如果您没有使用上述工具之一,您可以通过直接从</span>sonatype 存储库<span><span>下载 JAR 文件将其包含在您的项目中 </span><span>。</span></span></p>
<p> </p>
<h1 id="document-data-format--extended-json" class="contains-headerlink"><span>文档数据格式:扩展 JSON </span></h1>
<h2 id="overview" class="contains-headerlink"><span>概览</span></h2>
<p><span>在本指南中,您可以了解如何在 MongoDB Java 驱动程序中使用扩展 JSON 格式。</span></p>
<p><span><span>JSON 是一种数据格式,表示对象、数组、数字、字符串、布尔值和空值的值。</span><span>的</span></span>扩展JSON<span>格式定义一个保留的密钥集合与前缀“ </span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">$</code><span>”来表示字段类型信息直接对应于每种类型在BSON,所述格式MongoDB使用来存储数据。</span></p>
<p><span>本指南解释了以下主题:</span></p>
<ul>
<li><span>不同的 MongoDB 扩展 JSON 格式</span></li>
<li><span>如何使用 BSON 库在扩展 JSON 和 Java 对象之间进行转换</span></li>
<li><span>如何创建 BSON 类型的自定义转换</span></li>
</ul>
<p><span>有关这些格式之间差异的更多信息,请参阅我们 </span>关于 JSON 和 BSON 的文章<span>。</span></p>
<h2 id="extended-json-formats" class="contains-headerlink"><span>扩展 JSON 格式</span></h2>
<p><span><span>MongoDB 扩展 JSON 具有不同的字符串格式来表示 BSON 数据。</span><span>每种不同的格式都符合 JSON RFC 并满足特定用例。</span><span>在</span></span>扩展<span>格式中,也被称为 </span>规范<span><span>格式,特征在于用于而不丢失信息每BSON类型的双向转换特定表示。</span><span>的</span></span>宽松模式<span> 格式是更简洁,更接近普通JSON,但并不代表所有类型的信息,例如数量字段的特定的字节大小。</span></p>
<p><span>请参阅下表以查看每种格式的说明:</span></p>
<div class="leafygreen-ui-nqkcdc">
<div class="leafygreen-ui-yk67qs"> </div>
<div class="leafygreen-ui-e8i7sa"> </div>
<div class="leafygreen-ui-phzgpi">
<table class="leafygreen-ui-bfo1fy" cellspacing="0" cellpadding="0">
<thead>
<tr data-testid="leafygreen-ui-header-row"><th class="leafygreen-ui-4ru01k" scope="col">
<div class="leafygreen-ui-177up3s">Name</div>
</th><th class="leafygreen-ui-jfqc29" scope="col">
<div class="leafygreen-ui-177up3s"><span class="leafygreen-ui-1l7ulzy"><span>描述</span></span></div>
</th></tr>
</thead>
<tbody>
<tr class="leafygreen-ui-11r90x1"><th class="leafygreen-ui-qs3932" scope="row">
<div class="leafygreen-ui-1sg2lsz" data-leafygreen-ui="td-inner-div">Extended</div>
</th>
<td class="leafygreen-ui-chd2rj">
<div class="leafygreen-ui-1sg2lsz" data-leafygreen-ui="td-inner-div">
<div class="line-block">
<div class="line"><span>也称为</span><em>规范</em><span>格式,这种 JSON 表示避免了 BSON 类型信息的丢失。</span></div>
<div class="line"><span>这种格式在失去人类可读性和与旧格式的互操作性的情况下优先保留类型。</span></div>
</div>
</div>
</td>
</tr>
<tr class="leafygreen-ui-11r90x1"><th class="leafygreen-ui-qs3932" scope="row">
<div class="leafygreen-ui-1sg2lsz" data-leafygreen-ui="td-inner-div">Relaxed Mode</div>
</th>
<td class="leafygreen-ui-chd2rj">
<div class="leafygreen-ui-1sg2lsz" data-leafygreen-ui="td-inner-div">
<div class="line-block">
<div class="line"><span>描述具有某些类型信息丢失的 BSON 文档的 JSON 表示。</span></div>
<div class="line"><span>这种格式在丢失某些类型信息的情况下优先考虑人类可读性和互操作性。</span></div>
</div>
</div>
</td>
</tr>
<tr class="leafygreen-ui-11r90x1"><th class="leafygreen-ui-qs3932" scope="row">
<div class="leafygreen-ui-1sg2lsz" data-leafygreen-ui="td-inner-div">Shell</div>
</th>
<td class="leafygreen-ui-chd2rj">
<div class="leafygreen-ui-1sg2lsz" data-leafygreen-ui="td-inner-div">
<div class="line-block">
<div class="line"><span>与 MongoDB shell 中使用的语法匹配的 JSON 表示。</span></div>
<div class="line"><span>这种格式优先考虑与 MongoDB shell 的兼容性,它经常使用 JavaScript 函数来表示类型。</span></div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="css-16sde8w e1q05nyc0 leafygreen-ui-vcnl12">
<div class="leafygreen-ui-dbzdxr"><span>笔记</span></div>
<div class="leafygreen-ui-1uncgx6">
<div class="leafygreen-ui-sp748n">
<p><span>驱动程序将</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">$uuid</code><span><span>扩展 JSON 类型从字符串</span><span>解析</span></span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">BsonBinary</code><span><span>为二进制子类型 4</span><span>的 </span><span>对象。有关</span></span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">$uuid</code><span><span>字段解析的</span><span>更多信息</span><span>,请参阅</span><span> 扩展 JSON 规范中</span></span>解析 $uuid 字段<span><span>的 </span><span>特殊规则</span><span>部分。</span></span></p>
</div>
</div>
</div>
<p><span>有关这些格式的更多详细信息,请参阅以下资源:</span></p>
<ul>
<li>JSON RFC<span>官方文档</span></li>
<li>MongoDB 扩展 JSON<span>服务器手册入口</span></li>
<li>mongo shell<span><span>服务器手册入口</span><span>中的数据类型</span></span></li>
<li>BsonBinary<span> API 文档</span></li>
<li>扩展 JSON 规范<span>GitHub 文档</span></li>
</ul>
<h3 id="extended-json-examples" class="contains-headerlink"><span>扩展 JSON 示例</span></h3>
<p><span><span>以下示例显示了一个包含以每个扩展 JSON 格式表示的 ObjectId、日期和长数字字段的文档。</span><span>单击与您要查看的示例的格式对应的选项卡:</span></span></p>
<div> </div>
<div class="leafygreen-ui-7jagd2">
<div class="leafygreen-ui-t0i70x"><button id="tab-2" class="leafygreen-ui-evvyvf" tabindex="0" name=""><span>Extended</span></button></div>
<div class="leafygreen-ui-t0i70x">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"_id": { "$oid": "573a1391f29313caabcd9637"<span style="color: rgba(0, 0, 0, 1)"> },
</span>"createdAt": { "$date": { "$numberLong": "1601499609"<span style="color: rgba(0, 0, 0, 1)"> }},
</span>"numViews": { "$numberLong": "36520312"<span style="color: rgba(0, 0, 0, 1)"> }
}</span></pre>
</div>
<p> </p>
</div>
<div class="leafygreen-ui-t0i70x"><button id="tab-3" class="leafygreen-ui-1ndpd7m" tabindex="-1" name=""><span>Relaxed Mode</span></button></div>
<div class="leafygreen-ui-t0i70x">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"_id": { "$oid": "573a1391f29313caabcd9637"<span style="color: rgba(0, 0, 0, 1)"> },
</span>"createdAt": { "$date": "2020-09-30T18:22:51.648Z"<span style="color: rgba(0, 0, 0, 1)"> },
</span>"numViews": 36520312<span style="color: rgba(0, 0, 0, 1)">
}</span></pre>
</div>
<p> </p>
</div>
<div class="leafygreen-ui-t0i70x"><button id="tab-4" class="leafygreen-ui-1ndpd7m" tabindex="-1" name=""><span>Shell</span></button></div>
<div class="leafygreen-ui-t0i70x">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"_id:": ObjectId("573a1391f29313caabcd9637"<span style="color: rgba(0, 0, 0, 1)">),
</span>"createdAt": ISODate("2020-09-30T18:22:51.648Z"<span style="color: rgba(0, 0, 0, 1)">),
</span>"numViews": NumberLong("36520312"<span style="color: rgba(0, 0, 0, 1)">)
}</span></pre>
</div>
<p> </p>
</div>
</div>
<h2 id="read-extended-json" class="contains-headerlink"><span>读取扩展 JSON </span></h2>
<h3 id="using-the-document-classes" class="contains-headerlink"><span>使用文档类</span></h3>
<p><span>您可以通过</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">parse()</code><span>从</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">Document</code><span>或</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">BsonDocument</code><span><span> 类</span><span>调用</span><span>静态方法</span><span>将扩展 JSON 字符串读入 Java 文档对象</span><span>,具体取决于您需要的对象类型。</span><span>此方法解析任何格式的扩展 JSON 字符串,并返回包含数据的该类的实例。</span></span></p>
<p><span>以下示例显示了如何使用</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">Document</code><span>该类将示例扩展 JSON 字符串读取到</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">Document</code><span>使用该</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">parse()</code><span><span>方法</span><span>的</span><span>对象中 </span><span>:</span></span></p>
<div class="cnblogs_code">
<pre>String ejsonStr = "{ \"_id\": { \"$oid\": \"507f1f77bcf86cd799439011\"}," +
"\"myNumber\": {\"$numberLong\": \"4794261\" }}}"<span style="color: rgba(0, 0, 0, 1)">;
Document doc </span>=<span style="color: rgba(0, 0, 0, 1)"> Document.parse(ejsonStr);
System.out.println(doc);</span></pre>
</div>
<p> </p>
<p><span>上述代码的输出应如下所示:</span></p>
<div class="css-1lnqf5z">
<div class="leafygreen-ui-1xban8j">
<div class="leafygreen-ui-1q8jsgx">
<div class="cnblogs_code">
<pre>Document{{_id=507f1f77bcf86cd799439011, myNumber=4794261}}</pre>
</div>
<p> </p>
</div>
</div>
</div>
<p><span>有关更多信息,请参阅我们的</span>文档<span><span>基础页面</span><span>。</span></span></p>
<h3 id="using-the-bson-library" class="contains-headerlink"><span>使用 BSON 库</span></h3>
<p><span>您还可以通过使用</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">JsonReader</code><span><span>类</span><span>将扩展 JSON 字符串读入 Java 对象,而无需使用 MongoDB Java 驱动程序的文档</span><span>类。</span><span>该类包含顺序解析扩展 JSON 字符串的任何格式的字段和值的方法,并将它们作为 Java 对象返回。</span><span>驱动程序的文档类也使用这个类来解析扩展的 JSON。</span></span></p>
<p><span>以下代码示例展示了如何使用</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">JsonReader</code><span>该类将扩展 JSON 字符串转换为 Java 对象:</span></p>
<div class="cnblogs_code">
<pre>String ejsonStr = "{ \"_id\": { \"$oid\": \"507f1f77bcf86cd799439011\"}," +
"\"myNumber\": {\"$numberLong\": \"4794261\" }}}"<span style="color: rgba(0, 0, 0, 1)">;
JsonReader jsonReader </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> JsonReader(ejsonStr);
jsonReader.readStartDocument();
jsonReader.readName(</span>"_id"<span style="color: rgba(0, 0, 0, 1)">);
ObjectId id </span>=<span style="color: rgba(0, 0, 0, 1)"> jsonReader.readObjectId();
jsonReader.readName(</span>"myNumber"<span style="color: rgba(0, 0, 0, 1)">);
Long myNumber </span>=<span style="color: rgba(0, 0, 0, 1)"> jsonReader.readInt64();
jsonReader.readEndDocument();
System.out.println(id </span>+ " is type: " +<span style="color: rgba(0, 0, 0, 1)"> id.getClass().getName());
System.out.println(myNumber </span>+ " is type: " +<span style="color: rgba(0, 0, 0, 1)"> myNumber.getClass().getName());
jsonReader.close();</span></pre>
</div>
<p> </p>
<p><span>此代码示例的输出应如下所示:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">507f1f77bcf86cd799439011 is type: org.bson.types.ObjectId
</span>4794261 is type: java.lang.Long</pre>
</div>
<p> </p>
<p><span>有关更多信息,请参阅</span>JsonReader<span> API 文档。</span></p>
<h2 id="write-extended-json" class="contains-headerlink"><span>写入扩展 JSON </span></h2>
<h3 id="using-the-document-classes-1" class="contains-headerlink"><span>使用文档类</span></h3>
<p><span>您可以从 的实例</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">Document</code><span>或 </span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">BsonDocument</code><span>通过调用</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">toJson()</code><span><span>方法</span><span>编写扩展 JSON 字符串</span><span>,可选择将 的实例传递给它</span></span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">JsonWriterSettings</code><span>以指定扩展 JSON 格式。</span></p>
<p><span>在此示例中,我们以轻松模式格式输出扩展 JSON。</span></p>
<div class="cnblogs_code">
<pre>Document myDoc = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Document();
myDoc.append(</span>"_id", <span style="color: rgba(0, 0, 255, 1)">new</span> ObjectId("507f1f77bcf86cd799439012")).append("myNumber", 11223344<span style="color: rgba(0, 0, 0, 1)">);
JsonWriterSettings settings </span>=<span style="color: rgba(0, 0, 0, 1)"> JsonWriterSettings.builder().outputMode(JsonMode.RELAXED).build();
System.out.println(doc.toJson(settings));</span></pre>
</div>
<p> </p>
<p><span>此代码示例的输出应如下所示:</span></p>
<div class="css-1lnqf5z">
<div class="leafygreen-ui-1xban8j">
<div class="leafygreen-ui-1q8jsgx">
<div class="cnblogs_code">
<pre>{"_id": {"$oid": "507f1f77bcf86cd799439012"}, "myNumber": 11223344}</pre>
</div>
<p> </p>
</div>
</div>
</div>
<h3 id="using-the-bson-library-1" class="contains-headerlink"><span>使用 BSON 库</span></h3>
<p><span>您还可以使用 BSON 库和</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">JsonWriter</code><span><span>类</span><span>从 Java 对象中的数据输出扩展 JSON 字符串</span><span>。</span><span>要构造 的实例</span></span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">JsonWriter</code><span>,请传递 Java 的子类</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">Writer</code><span><span>以指定您希望如何输出扩展 JSON。</span><span>您可以选择传递一个</span></span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">JsonWriterSettings</code><span><span> 实例来指定扩展 JSON 格式等选项。</span><span>默认情况下, </span></span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">JsonWriter</code><span><span>使用轻松模式格式。</span><span>MongoDB Java 驱动程序的文档类也使用这个类将 BSON 转换为扩展 JSON。</span></span></p>
<p><span>以下代码示例展示了如何使用</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">JsonWriter</code><span>创建扩展 JSON 字符串并将其输出到</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">System.out</code><span><span>. </span><span>我们通过向</span></span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">outputMode()</code><span><span>builder 方法</span><span>传递</span></span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">JsonMode.EXTENDED</code><span><span>常量来</span><span>指定格式</span><span>:</span></span></p>
<div class="cnblogs_code">
<pre>JsonWriterSettings settings =<span style="color: rgba(0, 0, 0, 1)"> JsonWriterSettings.builder().outputMode(JsonMode.EXTENDED).build();
</span><span style="color: rgba(0, 0, 255, 1)">try</span> (JsonWriter jsonWriter = <span style="color: rgba(0, 0, 255, 1)">new</span> JsonWriter(<span style="color: rgba(0, 0, 255, 1)">new</span> BufferedWriter(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> OutputStreamWriter(System.out)), settings)) {
jsonWriter.writeStartDocument();
jsonWriter.writeObjectId(</span>"_id", <span style="color: rgba(0, 0, 255, 1)">new</span> ObjectId("507f1f77bcf86cd799439012"<span style="color: rgba(0, 0, 0, 1)">));
jsonWriter.writeInt64(</span>"myNumber", 11223344<span style="color: rgba(0, 0, 0, 1)">);
jsonWriter.writeEndDocument();
jsonWriter.flush();
}</span></pre>
</div>
<p> </p>
<p><span>此代码示例的输出应如下所示:</span></p>
<div class="css-1lnqf5z">
<div class="leafygreen-ui-1xban8j">
<div class="leafygreen-ui-1q8jsgx">
<div class="cnblogs_code">
<pre>{"_id": {"$oid": "507f1f77bcf86cd799439012"}, "myNumber": {"$numberLong": "11223344"}}</pre>
</div>
<p> </p>
</div>
</div>
</div>
<p><span>有关本节中提到的方法和类的更多信息,请参阅以下 API 文档:</span></p>
<ul>
<li>JSONWriter</li>
<li>JsonWriter 设置</li>
<li>输出模式()</li>
</ul>
<h2 id="custom-bson-type-conversion" class="contains-headerlink"><span>自定义 BSON 类型转换</span></h2>
<p><span>除了指定</span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">outputMode()</code><span>要格式化 JSON 输出之外,您还可以通过将转换器添加到 </span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">JsonWriterSettings.Builder</code><span><span>. </span><span>这些转换器方法检测 Java 类型并执行</span></span><code class="css-rjswxq e1wawog0 leafygreen-ui-1vat6ol">Converter</code><span><span>传递给它们的</span><span>定义的逻辑</span><span>。</span></span></p>
<p><span>以下示例代码显示了如何附加定义为 lambda 表达式的转换器以简化轻松模式 JSON 输出。</span></p>
<div class="cnblogs_code">
<pre>JsonWriterSettings settings =<span style="color: rgba(0, 0, 0, 1)"> JsonWriterSettings.builder().outputMode(JsonMode.RELAXED)
.objectIdConverter((value, writer) </span>-><span style="color: rgba(0, 0, 0, 1)"> writer.writeString(value.toHexString()))
.dateTimeConverter(
(value, writer) </span>-><span style="color: rgba(0, 0, 0, 1)"> {
ZonedDateTime zonedDateTime </span>=<span style="color: rgba(0, 0, 0, 1)"> Instant.ofEpochMilli(value).atZone(ZoneOffset.UTC);
writer.writeString(DateTimeFormatter.ISO_DATE_TIME.format(zonedDateTime));
})
.build();
Document doc </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Document()
.append(</span>"_id", <span style="color: rgba(0, 0, 255, 1)">new</span> ObjectId("507f1f77bcf86cd799439012"<span style="color: rgba(0, 0, 0, 1)">))
.append(</span>"createdAt", Date.from(Instant.ofEpochMilli(1601499609000L<span style="color: rgba(0, 0, 0, 1)">)))
.append(</span>"myNumber", 4794261<span style="color: rgba(0, 0, 0, 1)">);
System.out.println(doc.toJson(settings)));</span></pre>
</div>
<p> </p>
<p><span>此代码的输出应如下所示:</span></p>
<div class="css-1lnqf5z">
<div class="leafygreen-ui-1xban8j">
<div class="leafygreen-ui-1q8jsgx">
<div class="cnblogs_code">
<pre>{"_id": "507f1f77bcf86cd799439012", "createdAt": "2020-09-30T21:00:09Z", "myNumber": 4794261}</pre>
</div>
<p> </p>
</div>
</div>
</div>
<p><span>在不指定转换器的情况下,轻松模式 JSON 输出应如下所示:</span></p>
<div class="css-1lnqf5z">
<div class="leafygreen-ui-1xban8j">
<div class="leafygreen-ui-1q8jsgx">
<div class="cnblogs_code">
<pre>{"_id": {"$oid": "507f1f77bcf86cd799439012"}, "createdAt": {"$date": "2020-09-30T21:00:09Z"}, "myNumber": 4794261}</pre>
</div>
<p> </p>
</div>
</div>
</div>
<p><span>有关本节中提到的方法和类的更多信息,请参阅以下 API 文档:</span></p>
<ul>
<li>转换器</li>
<li>JsonWriterSettings.Builder</li>
</ul>
<p> </p><br><br>
来源:https://www.cnblogs.com/cnwcl/p/15361395.html
頁:
[1]