解析json输出字符串

2024-09-23 22:32:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,如何将其转换为json字符串?我想在下面的输出(op)中获取commitMessage的第一行?提前谢谢

>>> op = subprocess.Popen('ssh -p 29999 server-name.com gerrit query --commit-message --format=JSON Ib3856dcf0826942787c3d5a076eb6888dae9k2be', shell=True, stdout=subprocess.PIPE, cwd='../').communicate()
>>>
>>> op
('{"project":"mtt/proprietary/fg","branch":"master","id":"Ib3856dcf0826942787c3d5a076eb6888dae9k2be","number":"1857599","subject":"store Gain","owner":{"name":"owner1","email":"one@mail.com","username":"user1"},"url":"https://server-name.com/1857599","commitMessage":"my commit message\\n\\nChange-Id: Ib949999d3f4d94299993d5a076eb681c4aaaa2be\\n","createdOn":1478281199,"lastUpdated":1478732989,"sortKey":"0041150d001ad179","open":false,"status":"MERGED"}\n{"type":"stats","rowCount":1,"runTimeMilliseconds":4}\n', None)
>>> js = json.loads(op)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer

Tags: nameincomjsonmessageserverlinefile
2条回答

从子进程返回的op变量不是字符串,而是由2个元素组成的元组。 只需执行:js = json.loads(op[0])来解析第一个元素,这是您试图解析的json字符串

进程有两个标准输出流:stdout和stderr。一个用于常规输出,另一个用于错误。communicate返回一个包含两个元素的元组:第一个是stdout,第二个是stderr。你需要第一个:

json.loads(op[0])

相关问题 更多 >