gpt4 book ai didi

python - 使用 bool 键值对将字符串转换为字典格式

转载 作者:行者123 更新时间:2023-12-01 00:39:49 24 4
gpt4 key购买 nike

我通过 ast.literal_eval() 将字符串转换为 python 字典。该字符串包含 bool 值,因此 ast.literal_eval() 出现 ValueError

通过谷歌搜索,我发现我必须添加语句 ast.literal_eval(json.dumps(json.loads(data))) 来处理 bool 数据。

但是,我仍然遇到同样的错误。

这是代码片段:

#!/usr/bin/python
import sys
import os
import ast
import json

def main(argv):
data = argv[1]
print(argv[1])

crldix = ast.literal_eval(json.dumps(json.loads(data)))

for drive in crldix['files']:
print("|{}|{}|".format(drive['name'], drive['boolkey']))

return 0

if __name__ == "__main__":
retval = main(sys.argv)
exit(retval)

#eof

输出:

./test.py '{  "files": [   {  "name": "filename",    "boolkey": false  }  ] } '

Traceback (most recent call last):
File "./test.py", line 20, in <module>
retval = main(sys.argv)
File "./test.py", line 12, in main
crldix = ast.literal_eval(json.dumps(json.loads(data)))
File "/usr/lib/python2.7/ast.py", line 80, in literal_eval
return _convert(node_or_string)
File "/usr/lib/python2.7/ast.py", line 63, in _convert
in zip(node.keys, node.values))
File "/usr/lib/python2.7/ast.py", line 62, in <genexpr>
return dict((_convert(k), _convert(v)) for k, v
File "/usr/lib/python2.7/ast.py", line 60, in _convert
return list(map(_convert, node.elts))
File "/usr/lib/python2.7/ast.py", line 63, in _convert
in zip(node.keys, node.values))
File "/usr/lib/python2.7/ast.py", line 62, in <genexpr>
return dict((_convert(k), _convert(v)) for k, v
File "/usr/lib/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string

最佳答案

ast.literal_eval(json.dumps(json.loads(data))) 是多余的(看看我在这里做了什么?)

json.loads 已经返回一个字典,因此无需将其转回字符串,然后使用 literal_eval 返回字典。

由于 json.loads('{ "files": [ { "name": "filename", "boolkey": false } ] } ') 有效,因此您遇到的任何问题都是由于终端将字符串传递给 sys.argv 的方式。

我不知道您使用的是什么操作系统/终端,但通常需要 " 才能传递带空格的参数。这意味着您必须转义另一个 " 在字符串中。

例如,在 Windows 上,执行

import sys
import json

print(json.loads(sys.argv[1]))

如下方式(注意\用于转义)

python test.py "{ \"files\": [   {  \"name\": \"filename\",    \"boolkey\": false  }  ] } "

工作,输出:

{'files': [{'name': 'filename', 'boolkey': False}]}

另一种方法,无需转义":

import sys
import json

print(json.loads(sys.argv[1].replace("'", '"')))

然后执行

python test.py "{  'files': [   {  'name': 'filename',    'boolkey': false  }  ] }"

效果也一样。

关于python - 使用 bool 键值对将字符串转换为字典格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57443852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com