首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将二进制文件内容转储到JSON数组中

将二进制文件内容转储到JSON数组中
EN

Stack Overflow用户
提问于 2021-10-28 21:17:07
回答 3查看 177关注 0票数 3

我有一个二进制文件,我想将其打包为JSON数组,如下所示:

代码语言:javascript
复制
{
  "content": [0, 23, 45,...]
}

现在,我使用十六进制转储将文件转储到一个单独的文件中(以打印为带逗号的无符号U8),并手动将这些内容粘贴到数组中:

代码语言:javascript
复制
hexdump -ve '1/1 "%u," foo.bin > foo_arr

为了寻找一种更好的方法来实现这一点,最好是通过命令行(jq,标准的*nix工具),JavaScript也可以工作,但我宁愿避免它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-10-28 21:35:06

这里有一个选择:

代码语言:javascript
复制
hexdump -ve '1/1 "%u\n"' foo.bin | jq -s '{content: .}'

在这里,我使用jq-s标志("slurp")将标准输入的所有行作为一个数组读取,然后简单地使用该数组作为content的值。

例如:

代码语言:javascript
复制
$ python -c 'open("foo.bin", "wb").write(b"abc")'
$ hexdump -ve '1/1 "%u\n"' foo.bin | jq -s '{content: .}'
{
  "content": [
    97,
    98,
    99
  ]
}
票数 4
EN

Stack Overflow用户

发布于 2021-10-28 23:40:48

使用perl

代码语言:javascript
复制
$ printf "\x00\x17\x2d" > foo.bin
$ perl -0777 -nE '@bytes = map { ord } split //, $_;
                  $" = ","; # Delimiter when inserting an array into a string
                  say qq/{"content":[@bytes]}/' foo.bin
{"content":[0,23,45]}

一次读取整个文件(-O777 -n)并将其拆分为一个字节数组,然后输出包含这些字节值的JSON。

票数 1
EN

Stack Overflow用户

发布于 2021-10-28 22:30:48

jq可以使用-R (或--raw-input)读取原始输入,并使用explode builtin将其转换为其码点编号

代码语言:javascript
复制
jq -Rs '{content: explode}' foo.bin

如果二进制文件不是太大,您还可以使用--arg将其读入一个变量,然后对其应用explode

代码语言:javascript
复制
jq -n --arg bin "$(cat foo.bin)" '{content: $bin | explode}'

注意:jq在Unicode代码点上操作,而您当前的hexdump方法转换的是单字节计数,因此在这方面结果可能会有所不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69761040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档