如何在 python 中使用 json.loads 直接将变量名称作为 dict 键传递?
how to pass directly variable name as dict key with json.loads in python?
我正在制作一个编写其他脚本的脚本,从终端调用脚本时参数作为 JSON 传递。
需要编写的脚本中包含字典。
此字典中的关键值之一是变量名(不是字符串)调用策略。
我的问题是这样的。
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))
运行 脚本 return 如果我将策略键值设置为字符串,该错误会消失。
错误:
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)
有没有简单的方法可以实现我的目标?
谢谢
从命令行传递 json
字符串时,引号/转义字符之一很有可能被底层 shell.
解释
所以这不是传递 json
字符串的 viable/reliable 方法。传递一个包含 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
和 build/parse 正确的命令行而不是传递字典?
我正在制作一个编写其他脚本的脚本,从终端调用脚本时参数作为 JSON 传递。
需要编写的脚本中包含字典。 此字典中的关键值之一是变量名(不是字符串)调用策略。
我的问题是这样的。
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))
运行 脚本 return 如果我将策略键值设置为字符串,该错误会消失。
错误:
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)
有没有简单的方法可以实现我的目标?
谢谢
从命令行传递 json
字符串时,引号/转义字符之一很有可能被底层 shell.
所以这不是传递 json
字符串的 viable/reliable 方法。传递一个包含 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
和 build/parse 正确的命令行而不是传递字典?