将一个json字符串作为参数传递给Python脚本会导致引号出现问题

时间:2016-11-17 16:47:14

标签: python json python-2.7

我想写一个脚本,它接受一个参数,一个包含一些json数据的字符串,并且(为了简单起见)打印一些东西。

import argparse
import json

parser = argparse.ArgumentParser(description='json load and print')
parser.add_argument('-i','--inputstring', help='Input String in JSON format',required=True)
args = parser.parse_args()

inp = parser.parse_args()

data = json.loads(inp)

print(data['Employees'])

当我从命令行运行它时,我得到一个错误,因为我用来包装字符串的双引号最终匹配json中的双引号:

python myscript.py -i "{ "Employees": "name name"}"
Unrecognized arguments Employees...

如果我将json双引号切换为单引号,则json解析器将无效。

我该如何处理这样的事情?

3 个答案:

答案 0 :(得分:1)

您应该用单引号替换双引号:

python myscript.py -i "{ 'Employees': 'name name'}"

答案 1 :(得分:1)

严格来说,你应该转义JSON中的内部双引号:

python myscript.py -i "{ \"Employees\": \"name name\"}"

但是看看你的代码,还有其他一些原因可能无法正常工作:

  1. 您为argsinp分配了相同的值,返回函数调用的值:parser.parse_args()。也许您打算分配inp = args.inputstring

  2. 您已将问题标记为python2但查看了print(...)语句,看起来您已为python3编写

答案 2 :(得分:1)

如果更改输入变量的分配方式,代码将按预期工作。改变这一行:

inp = parser.parse_args()

inp = args.inputstring

parse_args()返回一个argparse.Namespace对象,因此您需要在将该对象传递给解析器之前检索该对象的输入。此外,您需要在shell命令中转义双引号。我通过以下更改运行获得预期输出:

python myscript.py -i "{ \"Employees\": \"name name\"}"