Python - 从 JSON 中的字段获取 LIST 值

Python - get a LIST value from field in JSON

我有一个包含三个字段的 JSON 文件:2 个是字符串,第三个是包含值列表的字段。

{   "STREAM": "stream",
    "BASIS_STREAM": "basis",
    "PATHS": "[/opt/path1,/opt/path2]"
}

现在我加载 JSON

with open('/pathToJsonFile.json', 'r') as f:
    data = json.load(f)

现在我想获取这些值。

stream=str(data["STREAM"])
basis=str(data["BASIS_STREAM"])
paths=data["BASE_PATHS"]

问题是 paths 也被威胁为字符串,尽管我必须将它用作列表。由于 Unicode,我正在使用 str 函数转换其他字段。代码必须在 python2 中。 非常感谢!

假设您有一个名为 data.json 的文件,其中包含以下内容:

{
   "STREAM": "stream",
   "BASIS_STREAM": "basis",
   "PATHS": "[/opt/path1,/opt/path2]"
}

也许你可以使用 str.<b>split</b> after calling json.<b>load</b>:

with open('data.json', 'r') as f:
    data = json.load(f)
print 'data = %s' % data
stream = str(data['STREAM'])
basis = str(data['BASIS_STREAM'])
paths = [str(u_s) for u_s in data['PATHS'][1:-1].split(',')]
print 'stream = %s' % stream
print 'basis = %s' % basis
print 'paths = %s' % paths

输出:

data = {u'PATHS': u'[/opt/path1,/opt/path2]', u'BASIS_STREAM': u'basis', u'STREAM': u'stream'}
stream = stream
basis = basis
paths = ['/opt/path1', '/opt/path2']

您的 /opt/path1/opt/path2 应该放在引号中以在列表中进行转换。如果您的 PATHS 总是有一个类似的模板,例如 "[/XXX,/YYY,/ZZZ,/TTT,/KKK]",那么下面的代码应该也会有所帮助。我已将您的数据转换为“['/XXX','/YYY','/ZZZ','/TTT','/KKK']”,以便可以使用 ast 轻松将其转换为列表图书馆。请看代码如下:

import json
import ast

with open("text_text.json") as f:
    data = json.load(f)

print(data["PATHS"]) # Your data

for i in data["PATHS"]:
    if i == "[":
        data["PATHS"] = data["PATHS"].replace("[", "['")
    elif i == ",":
        data["PATHS"] = data["PATHS"].replace(",/", "','/")
    elif i == "]":
        data["PATHS"] = data["PATHS"].replace("]", "']")
    #print(data["PATHS"])

print(type(data["PATHS"]))
print(data["PATHS"]) #converted to a data which can be converted to a list.
data_paths = ast.literal_eval(data["PATHS"]) # ast is used to convert str to list. 

print(data_paths) # 'list' data
print(type(data_paths))

查看代码的输出:

如果您的 PATH 有更多数据如下: