json - 使用 jq 将带有换行符的文本文件转换为 json
问题描述
我已经看到了很多使用 jq 将文本文件转换为 json 的示例,但我遇到了一些可能很明显的问题。我的输入文件具有以下格式:
key1: string1
key2: string1
key1: string3
key2: string3
我怎样才能把它翻译成:
[
{"key1":"string1", "key2": "string2"},
{"key1":"string3", "key2": "string4"}
]
我尝试inputs
与 jq 一起使用,例如jq -R -n -c '[inputs|split(":")|{(.[0]):.[1]}] | add'
,但只要文件中有换行符,它就会失败:
jq: error (at result.txt:8): Cannot use null (null) as object key
.
谢谢
解决方案
由于减少被广泛理解,这是一个reduce
基于简单的解决方案,它不需要在 key:value 行组之间换行。也就是说,在构造数组时,一旦遇到前一个对象中出现的键,就会启动一个新对象。
< input.txt jq -nR '
reduce (inputs
| select(length > 0)
| capture("(?<k>^[^:]*): *(?<v>.*)")
| {(.k):.v}) as $in (null;
if . == null then [$in]
elif (.[-1] | has($in|keys_unsorted[0])) then . + [$in]
else .[-1] += $in end)'
推荐阅读
- python - 如何使用 sklearn LassoCV,我做错了什么?
- python-3.x - 没有名为“openslide”的模块
- angularjs - 在 html 中正确使用 ng-if 指令
- python - 如果在先前的计算完成之前有新的请求到来,Tensorflow Serving 会失败
- r - FX 转换取决于 FX 交换(交叉 df 乘法)
- php - PHP 返回部分路径
- node.js - mongodb $near 提供不准确的排序
- three.js - obj在three.js objloader中缺少材料
- filter - NLMS 回声消除:我们如何估计生成远端回声的时间步长?
- git - Difftool 未打开,命令行挂起