使用布尔键值pai将字符串转换为字典格式

2024-09-30 08:26:43 发布

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

我通过ast.literal_eval()将字符串转换为python字典。字符串包含布尔值,因此ast.literal_eval()得到{}。在

在google上,我发现我必须添加语句ast.literal_eval(json.dumps(json.loads(data)))来处理boolen数据。在

但是,我还是犯了同样的错误。在

以下是代码片段:

#!/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

输出:

^{pr2}$

Tags: 字符串importjsondatamainevalsysdrive
1条回答
网友
1楼 · 发布于 2024-09-30 08:26:43

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

json.loads已经返回了一个字典,因此不需要将其返回到字符串,然后返回到带有literal_eval的dict。在

由于json.loads('{ "files": [ { "name": "filename", "boolkey": false } ] } ')起作用,因此出现的任何问题都是由于终端将字符串传递给sys.argv的方式造成的。在

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

例如,在Windows上执行

import sys
import json

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

按以下方式(注意用于转义的\

^{pr2}$

工作,输出:

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

另一种方法,无需转义"

import sys
import json

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

然后执行

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

同样有效。在

相关问题 更多 >

    热门问题