字符串内的 JSON 的 argparse
Posted
技术标签:
【中文标题】字符串内的 JSON 的 argparse【英文标题】:Argparse of a JSON that is inside a string 【发布时间】:2020-05-01 16:39:03 【问题描述】:试图将包含 JSON 的 字符串传递给 argparse,无法将生成的内容用作正确的 JSON(json.loads 错误),需要帮助! 这是我尝试过的
import argparse
import json
parser = argparse.ArgumentParser()
parser.add_argument('-a', dest='parametros', nargs='+', type=str,
help='dados')
args = parser.parse_args()
print(args.parametros)
现在,我正在使用:
python test.py b'-a field1=\'pokemonmaster\' -a field2=\'"_id": "$oid": "5de", "code": 2, "field1": "pokemonmaster", "filter": "name", "descricao": "Circunst\\u00e2ncia", "data": null, "status": "1001"\''
输出是一个类型列表:
["field2='_id:", ':', '5de,', 'code:', '2,', 'field1:', 'pokemonmaster,', 'filter:', 'name,', 'descricao:', 'Circunst\\u00e2ncia,', 'data:', 'null,', 'status:', "1001'"]
我从所需的类似 JSON 的字符串中得到的最接近的是 after
aux1 = ' '.join(args.parametros)
aux2 = aux1.split("field2=")
aux3 = ''.join(aux2)
aux4 = aux3.split('\'')
print(aux4[1])
并且输出是 str 类型:
_id: : 5de, code: 2, field1: pokemonmaster, filter: name, descricao: Circunst\u00e2ncia, data: null, status: 201
我需要的是:
"_id": "$oid": "5de", "code": 2, "field1": "pokemonmaster", "filter": "name", "descricao": "Circunst\\u00e2ncia", "data": null, "status": "1001"
问题:
1) argparse 不知何故未检测到带有 $ 美元符号的键,例如:"$oid": "5de" -> :', '5de
2)如果尝试了json.loads(aux4[1]),结果是这样的
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
3) 有没有办法在输出中正确添加引号?
【问题讨论】:
Afaict the field2 end delimiter is different from the start delimiter,对吗? 第一个命令python test.py b'-a ...'
中前导b
的目的是什么?看起来您希望它是一个字节串。
您是否尝试过在所有 -a 值周围加上引号。
我还没有尝试理解你的例子。但是 1) 通过足够的引用,您可以将有效的 json
字符串作为命令行值传递(如有疑问,请检查 sys.avgv
),2) 您可以使用 json.loads
解析字符串,甚至将其指定为参数 @987654333 @函数。
你的 shell 引用在我看来是错误的。 (为什么你以b
开头?为什么你的-a
参数在单个字符串中?)此外,field1
和field2
让我感到困惑。如果它们需要是动态的,只需将它们作为 JSON 的一部分(它们目前不使用正确的语法)。如果它们是静态的,则将您的ArgumentParser
更改为分别采用--field1
和--field2
。部分问题似乎是您试图同时做太多不同的事情。
【参考方案1】:
看来你的 json 格式不正确。
尝试使用 Hjson 库:
https://hjson.github.io/
import hjson
...
hjson.loads(yourText);
【讨论】:
demjson Lib 也能做到这一点以上是关于字符串内的 JSON 的 argparse的主要内容,如果未能解决你的问题,请参考以下文章
Python argparse 与 stdin 互斥是选项之一
iPhone JSON框架不解析不在对象或数组内的JSON字符串对象