在Linux中以排列格式从文件中获取JSON值,而无需使用JQ命令

问题描述

我的JSON文件:

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

预期结果:

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

我需要以重新排列的顺序显示结果,并且如果json文件中包含该模式,则应在最终结果中将其替换为“ NULLABLE”值。

我能够在下面的命令中达到以下要求:

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

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

解决方法

我认为这可能有效。

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["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]

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...