如何将输入参数转换为 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()

但是请注意,如果您的输入数据包含字符 }:,

,这种方式可能会导致很多错误