我们将整数和浮点数理会为单独的范例,这应承我们支持[-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转储回字符串的代码示例:
- ParsedJson::iterator pjh(pj);
- if (!pjh.isOk()) {
- std::cerr << " Could not iterate parsed result. " << std::endl;
- return EXIT_FAILURE;
- }
- compute_dump(pj);
- //
- // where compute_dump is :
-
- void compute_dump(ParsedJson::iterator &pjh) {
- if (pjh.is_object()) {
- std::cout << "{";
- if (pjh.down()) {
- pjh.print(std::cout); // must be a string
- std::cout << ":";
- pjh.next();
- compute_dump(pjh); // let us recurse
- while (pjh.next()) {
- std::cout << ",";
- pjh.print(std::cout);
- std::cout << ":";
- pjh.next();
- compute_dump(pjh); // let us recurse
- }
- pjh.up();
- }
- std::cout << "}";
- } else if (pjh.is_array()) {
- std::cout << "[";
- if (pjh.down()) {
- compute_dump(pjh); // let us recurse
- while (pjh.next()) {
- std::cout << ",";
- compute_dump(pjh); // let us recurse
- }
- pjh.up();
- }
- std::cout << "]";
- } else {
- pjh.print(std::cout); // just print the lone value
- }
- }
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|