【发布时间】:2021-03-19 06:15:45
【问题描述】:
我有一个 CSV 文件(父子格式)。是否可以使用 JQ 转换为 JSON 格式?
CSV 文件
<pre>
</Pre>
JSON 文件
<Pre>
</Pre>
【问题讨论】:
标签: json csv parent-child jq
我有一个 CSV 文件(父子格式)。是否可以使用 JQ 转换为 JSON 格式?
CSV 文件
<pre>
</Pre>
JSON 文件
<Pre>
</Pre>
【问题讨论】:
标签: json csv parent-child jq
以下内容提供了完整解决所述问题的基础。代替 提供有关孩子的冗余详细信息,它只提供他们的 ID。如果您确实需要冗余,那么只需再添加一个后处理步骤,这很简单。
这里的解决方案是基于“儿童”字典的构建。
大致如下:
jq -R -f program.jq data.csv
def obj($headers):
. as $in
| reduce range(0; $headers|length) as $i ({};
.[$headers[$i]] = $in[$i]);
split(",") as $headers
| [ inputs
| split(",")
| map_values(if . == "NULL" then null else . end)
| obj($headers) ]
| (reduce .[] as $row ({};
if $row.parent_id
then .[$row.parent_id] += [$row.id]
else . end ) ) as $children
| map( del(.parent_id) | .children = ($children[.id] // []) )
使用给定的输入,输出开始如下:
[
{
"id": "1",
"text": "engine",
"children": [
"2",
"3"
]
},
{
"id": "2",
"text": "exhaust",
"children": []
},
【讨论】:
id 被假定为文本,因为这就是您的 JSON 所指示的内容。如果不是文本,则需要调整给定的解决方案。