我有以下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二进制数据的hexdump:
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解析这个二进制数据?
发布于 2018-08-22 16:32:37
由于这不是标准格式,而是Qt独有的特殊格式,因此可能没有非Qt库可以解析它。
此外,因为它没有文档和内部,所以不能保证从Qt.1的版本到版本都是一样的
如果您愿意阅读Qt源代码(确保没有对您不需要任何许可限制),那么格式似乎在src / corelib / serialization / qjson_p.h中很好地记录了。 。因此,您可以为此格式编写自己的解析器。您甚至可以从该序列化目录的其余部分借用源代码来完成大部分工作。
否则,唯一的选择是通过查看各种JSON和Qt-binary-JSON等价物以及确定如何存储每种值来对其进行反向工程。 (它不能太复杂; JSON没有那么多......)
1.实际上,源代码中的文档有一个明确的警告:“这个文件不是Qt API的一部分。它纯粹作为一个实现细节存在。这个头文件可能会随着版本的变化而不另行通知,甚至是删除“。
https://stackoverflow.com/questions/-100006038
复制相似问题