python - 在 python 中使用 argparse 解析整个 JSON
问题描述
我正在尝试使用 ARGPARSE 库在一个简单的参数中解析整个 Json,问题是它在遇到子内部的不同元素时突然停止,例如“-”和“”。
这是测试代码:
#parse.py
import argparse
parser = argparse.ArgumentParser(description='JSON_test')
parser.add_argument('-contenido', action='store', dest='CONTENIDO',
help='JSON content')
args = parser.parse_args()
C = args.CONTENIDO
print (C)
这是运行代码的示例
python parse.py -contenido """{"desde": "2020-03-01","hasta": "2020-03-31","plantas": [{"id": 6,"nombre": "MDS","inversores": [{"id": "Ingeteam 0237","energa": 2152.8070,"pr": 61.5299,"disponibilidad": 81.1770,"factorPlanta": 15.5313}, {"id": "Ingeteam 0538","energa": 2167.5898,"pr": 61.9315,"disponibilidad": 81.0459,"factorPlanta": 15.6381}, {"id": "Ingeteam 0236","energa": 2168.1885,"pr": 61.9511,"disponibilidad": 80.9856,"factorPlanta": 15.6426}, {"id": "Ingeteam 0563","energa": 2206.8702,"pr": 63.0825,"disponibilidad": 80.9455,"factorPlanta": 15.9219}]"""
最后是错误
parse.py: error: unrecognized arguments: 0237,energia: 2152.8070,pr: 61.5299,disponibilidad: 81.1770,factorPlanta: 15.5313}, {id: Ingeteam 0538,energia: 2167.5898,pr: 61.9315,disponibilidad: 81.0459,factorPlanta: 15.6381}, {id: Ingeteam 0236,energia: 2168.1885,pr: 61.9511,disponibilidad: 80.9856,factorPlanta: 15.6426}, {id: Ingeteam 0563,energia: 2206.8702,pr: 63.0825,disponibilidad: 80.9455,factorPlanta: 15.9219}]"
我们的架构不允许我们使用文件进行解析,因此无法解决问题 :(。我能做什么?我已经阅读了很多 SOF 帖子,明天我将对其进行测试,但我认为他们不会不适合这个特定问题,我们的 json 非常大,我们需要从单个参数运行它。提前致谢!
解决方案
使用一个单引号来包装命令行参数,而不是三双引号。三双引号是 Python 语法,而不是 shell 语法。
python parse.py -contenido '{"desde": "2020-03-01","hasta": "2020-03-31","plantas": [{"id": 6,"nombre": "MDS","inversores": [{"id": "Ingeteam 0237","energa": 2152.8070,"pr": 61.5299,"disponibilidad": 81.1770,"factorPlanta": 15.5313}, {"id": "Ingeteam 0538","energa": 2167.5898,"pr": 61.9315,"disponibilidad": 81.0459,"factorPlanta": 15.6381}, {"id": "Ingeteam 0236","energa": 2168.1885,"pr": 61.9511,"disponibilidad": 80.9856,"factorPlanta": 15.6426}, {"id": "Ingeteam 0563","energa": 2206.8702,"pr": 63.0825,"disponibilidad": 80.9455,"factorPlanta": 15.9219}]'
您也可以使用一个双引号来包装参数,但您需要转义参数中的每个双引号。
推荐阅读
- powershell - Get-ADUser Filter 参数匹配第二次
- php - laravel 无法在 app/http/controller/productController.php 中创建函数
- git - 从命令行在 Bitbucket 上创建拉取请求
- python - 使用 python 从 Teradata 批量导出
- c++ - C++ 重载和模板化仿函数及其参数的完美转发
- node.js - 从文件系统安装本地节点包。
- vue.js - 如何调用 Element-UI 表单的 validate 方法
- php - PHPExcel - 一次设置具有相同值的单元格
- nlp - 查找不包含单词的句子的情感
- r - 2组的条形图离散变量