问题描述
我的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]