从终端运行python脚本时传递Json

从终端运行python脚本时传递Json,python,json,shell,Python,Json,Shell,我希望在从终端运行python脚本时将JSON作为参数传递。我可以从终端传递JSON对象吗。然而,我只能从终端传递字符串,但我需要JSON而不是那个 我尝试如下传递字符串,得到了预期的结果 $ python test.py 'Param1' 但是如果我想要JSON,它会给出错误 $ python test.py { 'a':1, 'b':2 } 有两种方法: $ cat a.py import json import sys print json.loads(sys.stdin.

我希望在从终端运行python脚本时将JSON作为参数传递。我可以从终端传递JSON对象吗。然而,我只能从终端传递字符串,但我需要JSON而不是那个

我尝试如下传递字符串,得到了预期的结果

   $ python test.py 'Param1'
但是如果我想要JSON,它会给出错误

   $ python test.py { 'a':1, 'b':2 }

有两种方法:

$ cat a.py
import json
import sys
print json.loads(sys.stdin.read().strip())
$ python a.py <<< '{ "a":1, "b":2 }'
{u'a': 1, u'b': 2}
$ echo '{ "a":1, "b":2 }' | python a.py
{u'a': 1, u'b': 2}

$ cat c.py
import json
import sys
print json.loads(sys.argv[1])
$ python c.py '{ "a":1, "b":2 }'
{u'a': 1, u'b': 2}

{'a':1,'b':2}
不是有效的JSON。但是您可以传递这是一个命令行参数:
'{“a”:1,“b”:2}'
花括号对shell有特殊意义。你需要实际使用一个字符串值我试过这个。由于json有更多的键,比如“{a:1,“b:2,”c:3,“d:4}”,我用json.loads()方法得到无序的键和值对。我需要参数中提供的json的有序列表,但我没有得到。你能帮我吗?
$ cat d.py
import json
import sys
from collections import OrderedDict
print json.loads(sys.argv[1], object_pairs_hook=OrderedDict)
$ python d.py '{ "a":1, "b":2, "c":3, "d":4 }'
OrderedDict([(u'a', 1), (u'b', 2), (u'c', 3), (u'd', 4)])