从Qt QJsonDocument::toBinaryData使用non-Qt读取Binary Json?
Read Binary Json from Qt QJsonDocument::toBinaryData using non-Qt?
我有以下JSON结构:
"{
"dateTime": "02/06/2016 - 13:01:06",
"event": 12344,
"eventOwner": "1",
"condition": "",
"ownerParent": "",
"sn": "0000000000"
}"
我使用Qt框架QJsonDocument::toBinaryData((函数将其编写为二进制文件头/水印。
但是,我无法从 python 和/或标准 c++ 解析它以再次使用 JSON。
看来Qt也在这个二进制数据上写了一个标头,标记"qbjs1",然后是rawData(Qt二进制JSON版本1(。
但是,有一些"\0"无法将二进制数据解析为 JSON。如下:
来自 JSON 二进制数据的十六进制转储:
00000000 71 62 6a 73 01 00 00 00 c0 00 00 00 0d 00 00 00 |qbjs............|
00000010 a8 00 00 00 9b 03 00 00 08 00 64 61 74 65 54 69 |..........dateTi|
00000020 6d 65 00 00 15 00 30 32 2f 30 36 2f 32 30 31 36 |me....02/06/2016|
00000030 20 2d 20 31 33 3a 30 31 3a 30 36 00 1a f3 02 00 | - 13:01:06.....|
00000040 06 00 65 76 65 6e 74 1b 0d 00 00 07 00 65 76 65 |..event......eve|
00000050 6e 74 4f 77 6e 65 72 00 00 00 08 00 31 00 00 1b |ntOwner.....1...|
00000060 0e 00 00 0b 00 63 6f 6e 64 69 74 69 6f 6e 00 00 |.....condition..|
00000070 00 00 00 00 00 1b 10 00 00 06 00 6f 77 6e 65 72 |...........owner|
00000080 50 61 72 65 6e 74 0b 00 34 35 20 66 6f 72 6b 65 |Parent..45 forke|
00000090 64 00 00 00 9b 13 00 00 05 00 73 6e 00 0d 00 30 |d.........sn...0|
000000a0 30 30 30 30 30 30 30 30 30 0c 00 00 00 34 00 00 |000000000....4..|
000000b0 00 40 00 00 00 5c 00 00 00 74 00 00 00 90 00 00 |.@......t......|
000000c0 00 0d |..|
000000c2
如何使用非 QT C++ 和 python 解析此二进制数据?
由于这不是标准格式,而是Qt特有的格式,因此可能没有非Qt库来解析它。
此外,由于它是未记录的和内部的,因此不能保证它从Qt.1的版本到版本都是相同的
。如果您愿意阅读Qt源代码(确保这不会对您施加任何您不想要的许可证限制(,该格式似乎在src/corelib/serialization/qjson_p.h
中记录得很好。因此,您可以为这种格式编写自己的解析器。您甚至可以从该serialization
目录的其余部分借用源代码来完成大部分工作。
否则,唯一的选择是通过查看各种JSON和Qt-binary-JSON等价物并弄清楚每种值的存储方式来对其进行逆向工程。(它不能太复杂;JSON没有那么多...
1. 事实上,源代码中的文档有一个很大的明确警告:"此文件不是 Qt API 的一部分。 它纯粹作为实现细节存在。 此头文件可能会因版本而异,恕不另行通知,甚至被删除。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 无法找到/读取配置文件.conf-FileIOException
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++将文本文件中的数据读取到结构数组中
- 正在将csv文件读取为双精度矢量
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 为什么在读取文件大小时文件IO速度会发生变化
- 正在读取二进制文件(is_open)
- 如何在c++中从文本文件中逐行读取整数
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 独立读取-修改-写入顺序
- 从文本文件中读取时钟时间和事件时间并进行处理
- 从Qt QJsonDocument::toBinaryData使用non-Qt读取Binary Json?
- 使用 ReadFile WinAPI 读取'Binary'文件
- 在使用ios:binary时读取标准