wy168 发表于 2022-8-21 12:26:48

「开源精选」jsoniter一款快且灵活的JSON解析器,特点就是快

<p id="7985e30d-53a3-4f9e-b407-ffe06d4ccb38" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="5679b9bc-2943-4f54-abb1-2e00da3efb8a" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="64d7a6f1-f440-432e-8b5f-644d80a2f94d" style="font-size:18px;margin:20px 0px;text-align:left;">jsoniter(json-iterator)是一款快且灵活的 JSON 解析器,同时提供 Java 和 Go 两个版本。从 dsljson 和 jsonparser 借鉴了大量代码。</span></span></p><h1 id="586ac2e1-0581-4a6b-b03d-9a0fd6600372" style="font-size:20px;margin:20px 0px;font-weight:700;">就是快!</h1><p id="5f6cca0e-1db3-496c-a615-55d35ae32686" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="6010cb09-3111-4225-b43d-207dfd4ddee6" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="f95885d3-502e-47c1-88d2-b4e0fa6ae283" style="font-size:18px;margin:20px 0px;text-align:left;">主流的 JSON 解析器是非常慢的。Jsoniter Java 版本可以比常用的 jackson/gson/fastjson</span></span><strong id="23d97657-b095-4857-b774-56e2ee8b8a66" style="font-size:18px;margin:20px 0px;font-weight:700;"><span id="f31648c7-3f53-4e65-93f8-ef3a0b9c4636" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="213c1370-8296-43ba-abe3-3cb62cfe6776" style="font-size:18px;margin:20px 0px;text-align:left;">快 3 倍</span></span></strong><span id="2c07a0a5-07af-496f-bdad-f6599aa476af" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="8bd75b91-40cf-4c46-a045-736149d8388a" style="font-size:18px;margin:20px 0px;text-align:left;">。如果你需要处理大量的 JSON 格式的日志,你应该考虑一下用 dsl-json 或者 Jsoniter 来节约可观的成本。根据 dsl-json 的性能评测,JSON 格式序列化和反序列化的速度其实一点都不慢,甚至比 thrift/avro 还要快。</span></span></p><div id="912b93f3-5656-4c83-9bc8-399f1276d2c4" style="font-size:18px;margin:20px 0px;text-align:left;"><img src="https://p9-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/7702026659a446a1bff0998a60d2c064~noop.image?_iz=58558&amp;from=article.pc_detail&amp;x-expires=1660438841&amp;x-signature=vrmXrSMryGJZdVkkEmUYTDDFSsk%3D" style="width:100%;"></div><p id="5df97725-5379-4f72-8bf0-d451db565d10" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="6b0939a6-db83-49f9-9ab5-347fd6d89ca2" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="f316e3bf-9cfc-43f6-b36a-6eb007ebe1a9" style="font-size:18px;margin:20px 0px;text-align:left;">Jsoniter 的 Golang 版本可以比标准库(encoding/json)</span></span><strong id="83ef8a8a-208a-4a3e-a694-7ad4bd0892ea" style="font-size:18px;margin:20px 0px;font-weight:700;"><span id="dc8738d9-3722-4ccd-b66b-0ca1f0e6adfa" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="481001ef-a86f-4a3a-84ab-772b9bfb5bad" style="font-size:18px;margin:20px 0px;text-align:left;">快 6 倍</span></span></strong><span id="476f388d-c6fd-4167-8649-afabc3307b1a" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="53e0d168-4e70-4a14-8fdf-11c03956b50c" style="font-size:18px;margin:20px 0px;text-align:left;">之多。而且这个性能是在不使用代码生成的前提下获得的。</span></span></p><div id="dc297ef3-cdb6-411e-a398-5bbadb33e8e4" style="font-size:18px;margin:20px 0px;text-align:left;"><img src="https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/66f4993fc9be452eaa987978420423d3~noop.image?_iz=58558&amp;from=article.pc_detail&amp;x-expires=1660438841&amp;x-signature=0rQ3IKm0VkgnkKNP2C%2FLImTJM%2B4%3D" style="width:100%;"></div><p id="9bafc32a-8e78-4a3d-8d33-8162fce0b0f6" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="d301d69a-faa4-4fe3-ad99-49e204ca9185" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="9d14d56a-0314-4c63-ba96-23ac51b5aa61" style="font-size:18px;margin:20px 0px;text-align:left;">完整报告请看性能评测,对于性能优化是怎么做的有详尽的解释。</span></span></p><h1 id="6992b532-9927-4856-bdd1-1bf4fe82413e" style="font-size:20px;margin:20px 0px;font-weight:700;">啥都能一行搞定!</h1><p id="77c10b95-db89-410d-b957-4b1231c82fd6" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="ae0fbe68-2a1f-4cfd-b690-44ceaac3c5f1" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="478f650e-ed3e-4789-9411-36fd7a15024c" style="font-size:18px;margin:20px 0px;text-align:left;">Jsoniter 的目标就是帮你把事搞定,越快越好。最常见的用法只需要一行:</span></span></p><pre id="8fab18e5-0b7e-40a1-8bf8-1cb9972a4d7f" style="font-size:18px;margin:20px 0px;text-align:left;"><code id="1dd24df8-d102-4537-bc58-746388cbf52d" style="font-size:18px;margin:20px 0px;text-align:left;">JsonStream.serialize(<span id="83ba1057-0773-47d5-b210-8aad23ce5e63" style="font-size:18px;margin:20px 0px;text-align:left;">new</span><span id="4746a27c-2938-445e-ab77-1aebd9fe9bbc" style="font-size:18px;margin:20px 0px;text-align:left;">int</span>[]{<span id="320e688f-cae5-4c0f-90f1-339efb8a7d74" style="font-size:18px;margin:20px 0px;text-align:left;">1</span>,<span id="79cb51ee-6251-4b57-8b4e-8fe3ee92bad8" style="font-size:18px;margin:20px 0px;text-align:left;">2</span>,<span id="68147b7c-c246-474e-95bb-da0d52b3220c" style="font-size:18px;margin:20px 0px;text-align:left;">3</span>});<span id="8235a934-b658-4605-a922-1127442b9955" style="font-size:18px;margin:20px 0px;text-align:left;">// from object to JSON</span></code></pre><pre id="0a329bcf-8cf7-461f-88a8-feb664c12517" style="font-size:18px;margin:20px 0px;text-align:left;"><code id="f4042a70-824b-4ee6-afd3-f856634c2833" style="font-size:18px;margin:20px 0px;text-align:left;">JsonIterator.deserialize(<span id="315ef192-b823-4dab-9aff-d796b2090032" style="font-size:18px;margin:20px 0px;text-align:left;">""</span>,<span id="61092918-d3c1-4c46-ad5c-d12aed79827b" style="font-size:18px;margin:20px 0px;text-align:left;">int</span>[]<span id="e8b33a0a-b973-43e8-a94f-e3d2bf99ff0e" style="font-size:18px;margin:20px 0px;text-align:left;">.<span id="2318ec72-6d27-4822-ad26-31299ad8ab14" style="font-size:18px;margin:20px 0px;text-align:left;">class</span>)</span>;<span id="f3b43802-95f1-4874-8aa4-6dd2030a9a84" style="font-size:18px;margin:20px 0px;text-align:left;">// from JSON to object, with class specified</span></code></pre><p id="de371608-ce06-4f61-a530-9ee0f4200bb4" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="bbd027b5-9aa6-4b24-bec0-54c130805795" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="26267532-6ca9-4fa6-a9a3-46773a366657" style="font-size:18px;margin:20px 0px;text-align:left;">如果这就是 Jsoniter 的一切本领,那么它不过是个平庸之辈而已。然而 Jsoniter 源于作者使用现有解析器时的不满与愤怒,它绝不会别人的老路的。想要体会到 Jsoniter 的独特体验能带来什么,我们来比较一下现有常规的 JSON API 的使用体验。</span></span></p><p id="087b12cc-437e-487f-a876-0dee711c8001" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="346492c2-53b3-4687-9bdc-a2f86bce4b02" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="0a28ca83-bac0-4ff8-b4fb-f0973f51e2c8" style="font-size:18px;margin:20px 0px;text-align:left;">根据过去的老经验,你一定知道下面这种用法是效率很低而且笨拙的,但是有些时候又不得不这么用:</span></span></p><pre id="775474b1-c99e-4ab6-9634-fa1a02c318d2" style="font-size:18px;margin:20px 0px;text-align:left;"><code id="19c2142a-b39c-4fa5-a253-40cc8cc2e2ba" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="4edee21c-fc2e-48c5-aee9-0f785fa1bfa6" style="font-size:18px;margin:20px 0px;text-align:left;">Map</span>&lt;<span id="69282ac7-8e7b-45ac-b33d-735132921564" style="font-size:18px;margin:20px 0px;text-align:left;">String</span>,<span id="c52b24fe-ea7d-4ad3-b98d-e276911fcbc0" style="font-size:18px;margin:20px 0px;text-align:left;">Object</span>&gt; obj = deserialize(input);<span id="eb2aaeed-6958-4d40-8e7e-57553a3394f3" style="font-size:18px;margin:20px 0px;text-align:left;">Object</span>firstItem = ((List&lt;<span id="efd4a27a-f6c8-42ba-9c74-110608113bdd" style="font-size:18px;margin:20px 0px;text-align:left;">Object</span>&gt;)obj.get(<span id="176f2744-f169-40d9-8e4f-c82e90459749" style="font-size:18px;margin:20px 0px;text-align:left;">"items"</span>)).get(<span id="072ffdc2-3d31-46ef-ba63-91db9b968ab4" style="font-size:18px;margin:20px 0px;text-align:left;">0</span>);</code></pre><p id="a5a12c18-9434-4811-8b4a-2b54bc638833" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="654e9e8e-565d-4c66-844e-f8b9c097bbd8" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="91f7c306-5713-4a31-83b9-5a99cdb4642f" style="font-size:18px;margin:20px 0px;text-align:left;">想要最佳的性能以及代码工整,你最好定义一个类来指定数据的格式:</span></span></p><pre id="f685bf46-5b85-4c5e-bd2d-5e626bbc557c" style="font-size:18px;margin:20px 0px;text-align:left;"><code id="04a97c5d-6934-4c10-9fbe-f857dcb2fa23" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="d9bda697-036d-4e1b-aebd-110ff7110b0c" style="font-size:18px;margin:20px 0px;text-align:left;">public</span><span id="8cacc887-9ccb-410a-9292-b0d49f8c168f" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="d859d281-a7d2-4308-8405-c7c0a7149efb" style="font-size:18px;margin:20px 0px;text-align:left;">class</span><span id="d1a34e38-fb74-48bb-9f89-b3ddfaefcf6e" style="font-size:18px;margin:20px 0px;text-align:left;">Order</span></span>{<span id="579e2545-f3c1-453b-b35f-bdcbc8d80398" style="font-size:18px;margin:20px 0px;text-align:left;">public</span>List<orderentry> items;}Order order = deserialize(input, Order<span id="45c20a6f-39c9-4eea-af8c-796e5db0a14a" style="font-size:18px;margin:20px 0px;text-align:left;">.<span id="2d5be3a2-801c-4cc4-a2d2-9d5d949320a7" style="font-size:18px;margin:20px 0px;text-align:left;">class</span>)</span>;OrderEntry firstItem = obj.items.get(<span id="beab2a20-2f3f-42e3-ae4d-27cbca4b61fc" style="font-size:18px;margin:20px 0px;text-align:left;">0</span>);</orderentry></code></pre><p id="1a993f42-0870-4ac5-a636-bee62beaf360" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="fb577322-0547-4325-8d2e-d35ae606a6f2" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="456acaec-7e57-46a3-ab39-cdb385601082" style="font-size:18px;margin:20px 0px;text-align:left;">在写正式的业务逻辑的代码时,这当然是很好的实践。但是如果你只是想从一个JSON嵌套结构里取一个内部的字符串的值的时候,必须提前定义每层数据结构未免有点太费周章了。能一行搞定的,就别费那么些话了:</span></span></p><pre id="2f5e8b11-50f7-47d7-9e1b-d3123240f278" style="font-size:18px;margin:20px 0px;text-align:left;"><code id="e4d00a93-3db7-4e96-9bf4-06e7f58147f8" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="b53a93c2-a54a-41da-9ffc-24d36980b88b" style="font-size:18px;margin:20px 0px;text-align:left;">Jsoniter</span><span id="c7b01e8f-209c-455b-80ed-6bbcb368afe8" style="font-size:18px;margin:20px 0px;text-align:left;">.deserialize</span>(input)<span id="7e13f151-75a6-4b66-ab48-83b28265b8dc" style="font-size:18px;margin:20px 0px;text-align:left;">.get</span>(<span id="35ed5c43-096c-480a-8bc5-3d2c5ab9c79d" style="font-size:18px;margin:20px 0px;text-align:left;">"items"</span>,<span id="604bfbcd-faf4-4abd-be41-89ec71c9f29c" style="font-size:18px;margin:20px 0px;text-align:left;">0</span>);<span id="9706d87c-0f0d-4679-b1c2-90185f42bdf2" style="font-size:18px;margin:20px 0px;text-align:left;">// the first item</span></code></pre><p id="be616bb5-cee8-40d0-b3b7-0fceccbf2093" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="7eb84748-1476-42ea-aba6-5dce84f954f4" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="7ba22300-8837-4259-b306-ffbf85cbe382" style="font-size:18px;margin:20px 0px;text-align:left;">deserialize 的返回值类型是Any,它有点类似于</span></span><span id="ede21716-3a59-4dc3-98bd-b9063a4223a3" style="font-size:18px;margin:20px 0px;text-align:left;">Map<string, object=""></string,></span>。两者都是通用的数据容器,但是和<span id="48330484-e5b1-4057-8a43-53e454f1bfb7" style="font-size:18px;margin:20px 0px;text-align:left;">Map<string, object=""></string,></span>不同,Any 有通过 api 使得数据获取上更方便:</p><pre id="a4d58dfc-ae4e-4d66-b0d8-bd5d45386c93" style="font-size:18px;margin:20px 0px;text-align:left;"><code id="a62fe99c-d569-4efa-b3be-63612e7b86b1" style="font-size:18px;margin:20px 0px;text-align:left;">Any any = Jsoniter.deserialize(input);<span id="9710c4ce-7a9b-49ee-b428-fe61645eee2c" style="font-size:18px;margin:20px 0px;text-align:left;">//</span>deserialize 返回<span id="2e862607-085b-4f63-88c3-f90b3b8acec8" style="font-size:18px;margin:20px 0px;text-align:left;">"Any"</span>,实际的解析是延迟在读取时才做的any.get(<span id="b8e47455-41ab-4c56-b85c-211af9613315" style="font-size:18px;margin:20px 0px;text-align:left;">"items"</span>,<span id="8befa2a3-a59f-44e2-bfe6-a8b142ec38e5" style="font-size:18px;margin:20px 0px;text-align:left;">*</span>,<span id="456a3206-8439-4c44-87ff-15b1adb2502b" style="font-size:18px;margin:20px 0px;text-align:left;">"name"</span>,<span id="47505d5a-6cde-47ef-b3c6-51dccd91eaa8" style="font-size:18px;margin:20px 0px;text-align:left;">0</span>);<span id="16dd50d1-2667-4d42-a4e0-bd88102bec23" style="font-size:18px;margin:20px 0px;text-align:left;">//</span>抽取所有 items 的第一个 nameany.get(<span id="8d4d35db-d021-4460-a54c-572b0de9060c" style="font-size:18px;margin:20px 0px;text-align:left;">"size"</span>).toLong();<span id="fdab95b1-a627-4ef8-a6c7-ee8e4c91baf9" style="font-size:18px;margin:20px 0px;text-align:left;">//</span>不管是<span id="dfdce7e2-32cb-4922-bbb8-25c169f9407f" style="font-size:18px;margin:20px 0px;text-align:left;">"100"</span>还是<span id="2c0acca2-9b5e-4631-a58e-02589c9d9ad1" style="font-size:18px;margin:20px 0px;text-align:left;">100</span>,都给转成 long 类型,就像弱类型一样any.bindTo(Order<span id="683322e8-cdf2-4fa7-bc6a-a924a4709516" style="font-size:18px;margin:20px 0px;text-align:left;">.<span id="2c23a53f-f26c-40e6-94b0-f081c558a49b" style="font-size:18px;margin:20px 0px;text-align:left;">class</span>);</span>/<span id="ff1c56a0-3728-4e45-a1d0-058c7e7ed6ea" style="font-size:18px;margin:20px 0px;text-align:left;">/ 把 JSON 绑定到对象for (Any element : any) {} /</span><span id="6c20bd42-db46-42dc-94ad-f51b8ea63230" style="font-size:18px;margin:20px 0px;text-align:left;">/ 遍历集合,Any 实现了 iterable 接口</span></code></pre><p id="6e5f228f-a65f-412f-bd71-f2d7bbdb10a1" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="ab02e216-3ec0-400d-950d-b965dfbb89ec" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="00a5c482-e806-4c7e-ac0f-5c444c8bd50c" style="font-size:18px;margin:20px 0px;text-align:left;">更好的消息是,这种 schema-less 的体验在延迟解析技术的帮助下,做到了性能上的无损。所有没有别读取的字段,仍然会以 JSON 的原始格式保留。使用</span></span><span id="7a02b4f7-5b1b-4141-9890-001d17ebb708" style="font-size:18px;margin:20px 0px;text-align:left;">Any</span>的性能要比使用<span id="ca27e35c-5883-4886-98cf-144fe08fe1af" style="font-size:18px;margin:20px 0px;text-align:left;">Map<string, object=""></string,></span>好得多。现在,在 Java 语言中,你也体会到 Javascript 或者 PHP 解析 JSON 时那种丝滑般体验。JSON 与 any,乐趣多多.</p><p id="24956798-4726-40cc-bf13-ba4423ab17aa" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="5cb399d1-9509-4242-b78a-a4a9232e2f38" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="f69e98c2-093e-43af-b504-4840c30fac59" style="font-size:18px;margin:20px 0px;text-align:left;">Jsoniter 不仅仅在运行时要做最快的解析器,也同时非常努力地变成代码写起来最方便的解析器。</span></span></p><h1 id="ac957ac0-3fee-4b51-9198-4f873dd0c0e9" style="font-size:20px;margin:20px 0px;font-weight:700;">从别的库迁移过来很容易</h1><ul id="6cfd407a-2949-43ba-883f-4a53989cc496" style="font-size:18px;margin:20px 0px;text-align:left;"><li id="a81b5b6c-47a5-4413-a805-709a768e378a" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="fda53d59-d22c-4037-a92b-0218eeea2219" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="09cbd35b-a8ea-4119-a72c-c252033aa9ab" style="font-size:18px;margin:20px 0px;text-align:left;">Golang 版本和标准库(encoding/json)完全兼容。</span></span><span id="46ede5c0-1b02-46c8-8783-4f8047ff7b60" style="font-size:18px;margin:20px 0px;text-align:left;">json.Marshal</span>或者<span id="17aaf46a-3a9d-4434-be22-b0e78b5df656" style="font-size:18px;margin:20px 0px;text-align:left;">json.Unmarshal</span>都支持,只需要把json替换为jsoniter</li><li id="420be4bd-da4f-4682-90b0-38bfa56dc80f" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="77f28482-2168-43c4-a57b-a2305d96bd35" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="395b32c3-7bfa-467f-a3b2-f95a651f365a" style="font-size:18px;margin:20px 0px;text-align:left;">支持 gson 兼容模式</span></span></li><li id="3fe53153-0d89-4a1a-b7d6-829f38651d34" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="18db7bb4-ed41-4857-abba-b9c07d61721d" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="8708688f-ebab-4c44-956d-65b5e1c79d0b" style="font-size:18px;margin:20px 0px;text-align:left;">支持 jackson 兼容模式(正在开发中)</span></span></li></ul><h1 id="534e09be-d9c6-4a63-8554-0baafb6ca286" style="font-size:20px;margin:20px 0px;font-weight:700;">文档</h1><p id="6bad1660-d551-4c4c-9ecd-89f190305683" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="f7762906-9cd7-4c0c-8460-e1485850a5f5" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="d8320e65-6e9c-4933-99da-671344dacb6c" style="font-size:18px;margin:20px 0px;text-align:left;">Jsoniter 功能多多,文档以例子为主。有很多代码示例来演示这些常用任务如何实现:</span></span></p><ul id="1f4bdeab-1d8a-424e-a8f1-eb4f03d35eb7" style="font-size:18px;margin:20px 0px;text-align:left;"><li id="78666ffc-a9d8-4ac0-b333-f4cb4c83909b" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="5eec3124-e19e-4f86-8f3b-ec63b63fef50" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="08280723-659a-4275-a583-ce0f50bbe0c8" style="font-size:18px;margin:20px 0px;text-align:left;">如何在 Android 平台上使用</span></span></li><li id="76a8b19a-45f5-4028-b113-f7c9efadcf5b" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="d301e75b-0554-41d7-9b23-e0dcd0ede0b8" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="61360e86-0bba-4c39-9286-b6b4141ee182" style="font-size:18px;margin:20px 0px;text-align:left;">如何检查 JSON 中是否包含指定属性</span></span></li><li id="1610bb5d-c1dd-403b-bde0-2d4a8ec2cc28" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="a0fccb6e-760c-4057-9c67-5587ff8cf117" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="9429aea2-3394-4415-b0e2-0e105901c4c3" style="font-size:18px;margin:20px 0px;text-align:left;">如何自定义序列化和反序列化的方法</span></span></li><li id="dce47b94-ade5-46a3-80cb-2f9db6572974" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="cdb63516-19a9-4f02-b154-e54f45bd1555" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="17725188-b326-4e96-9b99-56e15afe90b8" style="font-size:18px;margin:20px 0px;text-align:left;">还有许多……</span></span></li></ul><h1 id="4600e5b3-b176-4786-8abf-077ba24a7ef2" style="font-size:20px;margin:20px 0px;font-weight:700;">怎样获取</h1><p id="6eb09fa1-75f7-4b30-a1ee-9a5b452f6c94" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="e98d1d1f-c947-43e4-9864-c5ca42f3d79e" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="c8d34965-5e77-4f46-9419-9002cbdacff5" style="font-size:18px;margin:20px 0px;text-align:left;">Java 版本</span></span></p><pre id="5a0d9de0-0934-4f57-bac7-579e13711989" style="font-size:18px;margin:20px 0px;text-align:left;"><code id="8d856a78-2038-4224-b593-9876913a4587" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="8d7c72b5-b508-4b1c-a37d-d38eab7d564a" style="font-size:18px;margin:20px 0px;text-align:left;">&lt;<span id="94f027b0-fdce-4166-8727-f368d2692865" style="font-size:18px;margin:20px 0px;text-align:left;">dependency</span>&gt;</span><span id="cdfedd98-0be1-404e-b5a9-5ed3c133493b" style="font-size:18px;margin:20px 0px;text-align:left;">&lt;<span id="750b9764-1e63-4503-97ab-c4933fe88a9a" style="font-size:18px;margin:20px 0px;text-align:left;">groupId</span>&gt;</span>com.jsoniter<span id="e8dde1ed-13be-486a-a507-1d05f968355b" style="font-size:18px;margin:20px 0px;text-align:left;"><!--<span id="a5cc9212-2c55-4e65-b36e-fb47f2ba83d5" style="font-size:18px;margin:20px 0px;text-align:left;"-->groupId</span>&gt;<span id="294da9ed-c407-412e-8af7-7df460be410f" style="font-size:18px;margin:20px 0px;text-align:left;">&lt;<span id="6d45be3d-8ce4-47b2-8890-97180e270999" style="font-size:18px;margin:20px 0px;text-align:left;">artifactId</span>&gt;</span>jsoniter<span id="623f69a6-6bca-44f8-86c4-a29f2d77072b" style="font-size:18px;margin:20px 0px;text-align:left;"><!--<span id="8065f9ad-d8d5-4b6a-af3f-0985b5e41422" style="font-size:18px;margin:20px 0px;text-align:left;"-->artifactId</span>&gt;<span id="d80ca3b0-a561-41cf-ad05-3aa9a2b746b1" style="font-size:18px;margin:20px 0px;text-align:left;">&lt;<span id="7c235e7e-7f8d-4845-b1fe-b52b08ae8bdf" style="font-size:18px;margin:20px 0px;text-align:left;">version</span>&gt;</span>0.9.19<span id="78feba75-be27-4471-bd01-2b3ed2fea7c1" style="font-size:18px;margin:20px 0px;text-align:left;"><!--<span id="c4f6f940-89b6-44ab-980c-6edd003d4622" style="font-size:18px;margin:20px 0px;text-align:left;"-->version</span>&gt;<span id="4deddb9f-370a-427d-9cc5-e1ec74a1e710" style="font-size:18px;margin:20px 0px;text-align:left;"><!--<span id="15fe842e-89df-4a9c-bd58-7bec706b4e60" style="font-size:18px;margin:20px 0px;text-align:left;"-->dependency</span>&gt;</code></pre><p id="3352e572-6cea-4036-af41-56ec6a4076b7" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="a78f1081-05ff-4c97-b52f-beb983611a3e" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="f1aca5c8-b403-4419-8007-400783921034" style="font-size:18px;margin:20px 0px;text-align:left;">Go 版本</span></span></p><pre id="58124f03-7ef1-4a4b-8129-8811c03ec54a" style="font-size:18px;margin:20px 0px;text-align:left;"><code id="857581d9-a928-483e-b511-7d7e04925b34" style="font-size:18px;margin:20px 0px;text-align:left;"><span id="350d2f4d-1dfb-4acf-a801-df3197f314ec" style="font-size:18px;margin:20px 0px;text-align:left;">go</span>get github.com/json-iterator/<span id="40dc0750-a296-4ebc-a2ad-a3ee5e22da99" style="font-size:18px;margin:20px 0px;text-align:left;">go</span></code></pre>
页: [1]
查看完整版本: 「开源精选」jsoniter一款快且灵活的JSON解析器,特点就是快