首页 > 解决方案 > 在不使用 JQ 命令的情况下,在 linux 中以排列格式从文件中获取 JSON 值

问题描述

我的 JSON 文件:

[{"type": "STRING", "mode": "NULLABLE", "name": "Article"},
{"type": "STRING", "mode": "NULLABLE", "name": "Sellable_UOM"},
{"type": "STRING", "name": "PriceFamilyCode"},
{"type": "STRING", "name": "PriceFamilyDescription"},
{"type": "STRING","name": "SalesDistrict"},
{"type": "DATE","name": "FiscalWeekendDate"}]

预期结果:

Article,NULLABLE,STRING
Sellable_UOM,NULLABLE,STRING
PriceFamilyCode,NULLABLE,STRING
PriceFamilyDescription,NULLABLE,STRING
SalesDistrict,NULLABLE,STRING
FiscalWeekendDate,NULLABLE,DATE

我需要重新排列顺序的结果,并且如果 json 文件包含模式,那么它应该被最终结果中的“NULLABLE”值替换。

我能够在下面的命令中实现这个 theoufh:

echo $schema | sed s/{/\\n{/g |jq -r '.[] |[ .name, .type, .mode //"NULLABLE"]|@csv' | sed s/'"'//g

但是由于某些原因,我的某些云构建不支持 JQ 命令,所以任何人都可以在不使用 linux 或 Python 中的 JQ 命令的情况下帮助我实现这个结果吗?

标签: pythonlinux

解决方案


我认为这可能有效。

cat yourjsonfile.json | python3 -c 'import json; import sys; payload = json.load(sys.stdin); bits = [[value["name"], value.get("mode", "NULLABLE"), value["type"]] for value in payload]; [print(",".join(bit))for bit in bits]'

这是格式很好的python3代码:

import json
import sys

payload = json.load(sys.stdin)
bits = [[value["name"], value.get("mode", "NULLABLE"), value["type"]] for value in payload]

# Using a list comprehension to get a one line for loop, not sure how to do it otherwise.
[print(",".join(bit))for bit in bits]

推荐阅读