在python中,如何使用json.loads直接将变量名作为dict键传递?

在python中,如何使用json.loads直接将变量名作为dict键传递?,python,json,load,Python,Json,Load,我正在编写一个脚本来编写其他脚本,在从终端调用脚本时,参数作为JSON传递 需要编写的脚本包含一个词汇表。 这个dict中的一个关键值是变量名(不是字符串)调用策略 我的问题是这样的 d = json.loads(sys.argv[2]) # d should looks like that d = { "stopLossValue": 5, "strategy": strategy, "strategyTitle": "week5" } dic = """ parameterD

我正在编写一个脚本来编写其他脚本,在从终端调用脚本时,参数作为JSON传递

需要编写的脚本包含一个词汇表。 这个dict中的一个关键值是变量名(不是字符串)调用策略

我的问题是这样的

d = json.loads(sys.argv[2])

# d should looks like that
d = {
  "stopLossValue": 5,
  "strategy": strategy,
  "strategyTitle": "week5"
}

dic = """
parameterDict = {}
""".format(json.dumps(d, sort_keys=True, indent=4))
如果我将策略键值设置为字符串,运行脚本将返回一个错误

错误:

Traceback (most recent call last):
  File "updateCandleStrategy.py", line 11, in <module>
    d = json.loads(sys.argv[2])
  File "/usr/lib/python3.4/json/__init__.py", line 318, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.4/json/decoder.py", line 343, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.4/json/decoder.py", line 361, in raw_decode
    raise ValueError(errmsg("Expecting value", s, err.value)) from None
ValueError: Expecting value: line 1 column 506 (char 505)
回溯(最近一次呼叫最后一次):
文件“updateCandleStrategy.py”,第11行,在
d=json.load(sys.argv[2])
文件“/usr/lib/python3.4/json/_init__.py”,第318行,加载
返回\u默认\u解码器。解码
文件“/usr/lib/python3.4/json/decoder.py”,第343行,在decode中
obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
文件“/usr/lib/python3.4/json/decoder.py”,第361行,原始解码
从“无”引发ValueError(errmsg(“期望值”,s,err.value))
ValueError:期望值:第1行第506列(字符505)
有没有一个简单的方法来实现我的目标


谢谢

当从命令行传递
json
字符串时,下面的shell很可能会解释其中一个引号/转义字符

因此,传递
json
字符串不是一种可行/可靠的方法。而是传递一个包含json数据的文件并读取它:

with open(sys.argv[2]) as f:
   d = json.load(f)
来自windows控制台的示例,仅打印第二个参数:

S:\python>foo.py ff "d = {"s":12,"d":15}"
d = {s:12,d:15}
引号已被删除。需要加倍

不过,在Linux终端上,将参数包装成单引号可以解决大多数情况,直到您偶然发现一个包含单引号的值


与其传递字典,为什么不使用
getopt
argparse
并构建/解析正确的命令行?

您希望如何通过cmd行传递包含变量的JSON字符串?谢谢,我会尝试。到目前为止,我已经发现了一个转折点,那就是执行字符串操作并用strategy替换“strategy”,但我认为其他东西可能更优雅。请看我的编辑,对于相对较少的数据,标准命令行解析可以。