python - 在不使用 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 命令的情况下帮助我实现这个结果吗?
解决方案
我认为这可能有效。
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]
推荐阅读
- c# - Xamarin 表单中的 MasterDetailPage + 底部选项卡
- android - NullPointerException,androidx.core.provider.CallbackWithHandler.onTypefaceResult
- git - Git 远程 URL 未更新为 https://
- spring-boot - Spring Boot:在另一个库中注入 bean
- reactjs - 如何解决 react-table 错误:- TypeError: plugin is not a function
- json - json 路径语法对值进行排序
- c++ - clang-12:错误:安装 Faunus 时链接器命令失败,退出代码为 1
- c++ - 使用 QtWebEngine 退出时 QT 崩溃
- sql - 根据输入值获取次数值
- android - 条纹访问电话号码(谷歌播放警告)