如何将输入参数转换为 python 中的 json 程序
How to convert input arguments to program as json in python
这是我的代码
import json
import sys
def main():
payloads=sys.argv[2]
payloads=payloads.replace(",",",\"")
payloads=payloads.replace(":","\":")
payloads=payloads.replace("{","{\"")
z=json.loads("'"+payloads+"'")
print(payloads)
if __name__ == "__main__":
main()
输入无法更改,因为它是自动生成的,我需要在 python 代码中解析它以获得单独的值。这怎么行,p.s。我不是 python 专家
当我尝试在命令提示符中 运行 时,如下所示(单行):
python test.py payload: "{"temperature":20,"humidity":80,"pressure":1000,"timestamp":1652419592750,"deviceid":"device1"}"
我看到以下错误:
Traceback (most recent call last):
File "test.py", line 14, in <module>
main()
File "test.py", line 10, in main
z=json.loads("'"+payloads+"'")
File "python3\lib\json\__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "python3\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "python3\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
在参数周围加上单引号,那么所有的双引号都会被保留,你不需要在Python.
中做任何替换
import json
import sys
def main():
payloads=sys.argv[2]
z=json.loads(payloads)
print(payloads)
if __name__ == "__main__":
main()
python test.py payload: '{"temperature":20,"humidity":80,"pressure":1000,"timestamp":1652419592750,"deviceid":"device1"}'
解决您的问题最简单的方法是在输入中添加好的引号,但如果不能,您可以使用这个
import json, sys
def main():
payloads=sys.argv[2]
payloads=payloads.replace(",",",\"")
payloads=payloads.replace(":","\":")
payloads=payloads.replace("{","{\"")
for x in payloads.split(","):
value = x.split(":")[1].replace("}", "")
try:
int(value)
float(value)
assert value not in ("true", "false", "null")
except (AssertionError, ValueError):
new = x.replace(value, f'"{value}"')
payloads = payloads.replace(x, new)
z=json.loads(payloads)
print(payloads)
if __name__ == "__main__":
main()
但是请注意,如果您的输入数据包含字符 }
、:
或 ,
,这种方式可能会导致很多错误
这是我的代码
import json
import sys
def main():
payloads=sys.argv[2]
payloads=payloads.replace(",",",\"")
payloads=payloads.replace(":","\":")
payloads=payloads.replace("{","{\"")
z=json.loads("'"+payloads+"'")
print(payloads)
if __name__ == "__main__":
main()
输入无法更改,因为它是自动生成的,我需要在 python 代码中解析它以获得单独的值。这怎么行,p.s。我不是 python 专家
当我尝试在命令提示符中 运行 时,如下所示(单行):
python test.py payload: "{"temperature":20,"humidity":80,"pressure":1000,"timestamp":1652419592750,"deviceid":"device1"}"
我看到以下错误:
Traceback (most recent call last):
File "test.py", line 14, in <module>
main()
File "test.py", line 10, in main
z=json.loads("'"+payloads+"'")
File "python3\lib\json\__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "python3\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "python3\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
在参数周围加上单引号,那么所有的双引号都会被保留,你不需要在Python.
中做任何替换import json
import sys
def main():
payloads=sys.argv[2]
z=json.loads(payloads)
print(payloads)
if __name__ == "__main__":
main()
python test.py payload: '{"temperature":20,"humidity":80,"pressure":1000,"timestamp":1652419592750,"deviceid":"device1"}'
解决您的问题最简单的方法是在输入中添加好的引号,但如果不能,您可以使用这个
import json, sys
def main():
payloads=sys.argv[2]
payloads=payloads.replace(",",",\"")
payloads=payloads.replace(":","\":")
payloads=payloads.replace("{","{\"")
for x in payloads.split(","):
value = x.split(":")[1].replace("}", "")
try:
int(value)
float(value)
assert value not in ("true", "false", "null")
except (AssertionError, ValueError):
new = x.replace(value, f'"{value}"')
payloads = payloads.replace(x, new)
z=json.loads(payloads)
print(payloads)
if __name__ == "__main__":
main()
但是请注意,如果您的输入数据包含字符 }
、:
或 ,