加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Simdjson:一个超高速的JSON解析工具

发布时间:2019-03-25 17:45:55 所属栏目:建站 来源:周大涛编译
导读:JSON文档在Internet上无处不在,处事器耗费大量时刻来理会这些文档。我们但愿在举办完全验证(包罗字符编码)时尽也许行使常用的SIMD指令来加快JSON自己的理会。 示意功效 simdjson行使的指令比最先辈的理会器RapidJSON少四分之三,比sajson少百分之五十。

我们将整数和浮点数理会为单独的范例,这应承我们支持[-9223372036854775808,9223372036854775808]中的大型64位整数,如Java long 或C / C ++ long long 。在区分整数和浮点数的理会器中,并非全部理会器都支持64位整数。(譬喻,sajson拒绝整数大于或便是2147483648的JSON文件.FreeJSON将理会包括过长整数的文件,如18446744073709551616作为浮点数)当我们无法将整数暗示为带标记的64位时值,我们拒绝JSON文档。

在理会进程中举办完备的UTF-8验证(像fastjson,gason和dropbox json11这样的理会器不会举办UTF-8验证);完全验证了这些数字(像gason和ultranjson这样的理会器将接管 [0e+] 为有用的JSON);验证未转义字符的字符串内容(像fastjson和ultrajson这样的理会器接管未转义的换行符和字符串中的标签)。

Architecture

理会器分两个阶段事变:

阶段1.(查找标志)快速标识布局元素,字符串等。我们在谁人阶段验证UTF-8编码。

阶段2.(布局构建)涉及构建排序的“树”(详细化为磁带)以赏识数据。在此阶段理会字符串和数字。

导航已理会的文档

以下是将理会后的JSON转储回字符串的代码示例:

  1. ParsedJson::iterator pjh(pj); 
  2.     if (!pjh.isOk()) { 
  3.       std::cerr << " Could not iterate parsed result. " << std::endl; 
  4.       return EXIT_FAILURE; 
  5.     } 
  6.     compute_dump(pj); 
  7.     // 
  8.     // where compute_dump is : 
  9.  
  10. void compute_dump(ParsedJson::iterator &pjh) { 
  11.   if (pjh.is_object()) { 
  12.     std::cout << "{"; 
  13.     if (pjh.down()) { 
  14.       pjh.print(std::cout); // must be a string 
  15.       std::cout << ":"; 
  16.       pjh.next(); 
  17.       compute_dump(pjh); // let us recurse 
  18.       while (pjh.next()) { 
  19.         std::cout << ","; 
  20.         pjh.print(std::cout); 
  21.         std::cout << ":"; 
  22.         pjh.next(); 
  23.         compute_dump(pjh); // let us recurse 
  24.       } 
  25.       pjh.up(); 
  26.     } 
  27.     std::cout << "}"; 
  28.   } else if (pjh.is_array()) { 
  29.     std::cout << "["; 
  30.     if (pjh.down()) { 
  31.       compute_dump(pjh); // let us recurse 
  32.       while (pjh.next()) { 
  33.         std::cout << ","; 
  34.         compute_dump(pjh); // let us recurse 
  35.       } 
  36.       pjh.up(); 
  37.     } 
  38.     std::cout << "]"; 
  39.   } else { 
  40.     pjh.print(std::cout); // just print the lone value 
  41.   } 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读