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
有更多数据如下:
我有一个包含三个字段的 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
有更多数据如下: