Python 访问特定的JSON数据
我正在尝试访问“protocol1”中的“dataset”或“protocol1”中的“log”中的“zeile”。但是我不能让它工作 我尝试了嵌套for循环,但没有成功 这是我的JSON文件Python 访问特定的JSON数据,python,json,flask,Python,Json,Flask,我正在尝试访问“protocol1”中的“dataset”或“protocol1”中的“log”中的“zeile”。但是我不能让它工作 我尝试了嵌套for循环,但没有成功 这是我的JSON文件 { “数据”:[ { “协议1”:{ “数据集”:“Testdataset1”, “eingangssprache”:“Testingangssprache1”, “Ausgangssrache”:“Testausgangssrache1”, “开始”:“13/01/2021 04:22 1”, “结束”
{
“数据”:[
{
“协议1”:{
“数据集”:“Testdataset1”,
“eingangssprache”:“Testingangssprache1”,
“Ausgangssrache”:“Testausgangssrache1”,
“开始”:“13/01/2021 04:22 1”,
“结束”:“14/01/2021 16:20 1”
},
“日志”:[
{
“zeile”:“01”,
“methode”:“lang detect”,
“语言1”:“德语”,
“语言2”:“英语”
},
{
“zeile”:“02”,
“methode”:“lang detect”,
“语言1”:“德语”,
“语言2”:“英语”
},
{
“zeile”:“03”,
“methode”:“lang detect”,
“语言1”:“德语”,
“语言2”:“英语”
}
]
},
{
“协议2”:{
“数据集”:“Testdataset2”,
“eingangssprache”:“Testingangssprache1”,
“Ausgangssrache”:“Testausgangssrache1”,
“开始”:“13/01/2021 04:22 1”,
“结束”:“14/01/2021 16:20 1”
},
“日志”:[
{
“zeile”:“01”,
“methode”:“lang detect es”,
“语言1”:“es”,
“语言2”:“英语和英语”
},
{
“zeile”:“01”,
“methode”:“lang detect”,
“语言1”:“德语es”,
“语言2”:“英语”
},
{
“zeile”:“01”,
“methode”:“lang dete esct”,
“语言1”:“germa esn”,
“语言2”:“英语”
}
]
}
]
}
也许有人知道怎么做?
我用的是金杯
以前是这样的
{
“数据”:[
{
“ausgangssprache”:“测试输出”,
“数据集”:“测试”,
“eingangssprache”:“Testin”,
“结束”:“2021年1月14日00:00”,
“开始”:“13/01/2021 04:22”,
“zeile”:“45”,
“方法”:“语言检测”,
“语言1”:“Testin”,
“语言2”:“测试语言”,
“zusammenfassung”:“Zsf”
}
]
}
我可以用这个html代码访问这个JSON
{data_protocol%}
{{i.dataset}}
{{i.eingangssprache}
{{i.ausgangssprache}}
{{i.start}}
{{i.end}
东西
{%endfor%}
返回json文件的python代码如下
json\u file=open(“data/table.json”,“r”)
data=json.load(json_文件)
json_file.close()
数据=数据['data']
返回呈现模板('index.html',
列名称=['Dataset','Eingangssprache','Ausgangssprache','Startzeit','Endzeit','LOG'],
数据(协议=数据)
我希望您能在这方面帮助我,提前感谢您可以简化您的数据,而不是使用
jinja2解决问题。这是我用来简化数据集的代码:
total_dict = {}
for count, element in enumerate(data_set['data']):
cleaned_data = {}
for value in element.values():
if type(value) == dict:
cleaned_data['dataset'] = value['dataset']
cleaned_data['eingangssprache'] = value['eingangssprache']
cleaned_data['ausgangssprache'] = value['ausgangssprache']
cleaned_data['start'] = value['start']
cleaned_data['end'] = value['end']
pass
elif type(value) == list:
# Store corresponding elements in one zeile_list
zeile_list = []
for i in value:
# Adding all properties for each zeile
each_list = [i['zeile'], i['methode'], i['language1'], i['language2']]
zeile_list.append(each_list)
zeile_dict = {}
# Adding number and value of each_zeile to dictionary
for i, v in enumerate(zeile_list):
zeile_dict[i + 1] = v
cleaned_data['zeile'] = zeile_dict
total_dict[str(count)] = cleaned_data
运行此代码后,字典将如下所示:
{
'0': {
'dataset': 'Testdataset1',
'eingangssprache': 'Testeingangssprache1',
'ausgangssprache': 'Testausgangssprache1',
'start': '13/01/2021 04:22 1',
'end': '14/01/2021 16:20 1',
'zeile': {
1: ['01', 'lang detect', 'german', 'english'],
2: ['02', 'lang detect', 'german', 'english'],
3: ['03', 'lang detect', 'german', 'english']}},
'1': {
'dataset': 'Testdataset2',
'eingangssprache': 'Testeingangssprache1',
'ausgangssprache': 'Testausgangssprache1',
'start': '13/01/2021 04:22 1',
'end': '14/01/2021 16:20 1',
'zeile': {
1: ['01', 'lang detect es', ' es', 'english es'],
2: ['01', 'lang detect', 'german es', 'engli essh'],
3: ['01', 'lang dete esct', 'germa esn', 'engli essh']}}
}
然后,您可以使用jinja2
轻松获取所需的所有数据:
total_dict = {
....
}
t = jinja2.Template('''
{% for data in total_dict.values() %}
dataset -- {{ data['dataset'] }}
...
{% for zeile_key, zeile_values in data['zeile'].items()%}
zeile{{zeile_key}} -- {{zeile_values}}
{% endfor %}
{% endfor %}
''')
print(t.render(total_dict=total_dict))
最后,结果如下所示:
dataset -- Testdataset1
...
zeile1 -- ['01', 'lang detect', 'german', 'english']
zeile2 -- ['02', 'lang detect', 'german', 'english']
zeile3 -- ['03', 'lang detect', 'german', 'english']
dataset -- Testdataset2
...
zeile1 -- ['01', 'lang detect es', ' es', 'english es']
zeile2 -- ['01', 'lang detect', 'german es', 'engli essh']
zeile3 -- ['01', 'lang dete esct', 'germa esn', 'engli essh']
您遇到了什么问题?我无法从“protocol1”获取输入,我想显示其中的属性。例如“dataset”:“Testdataset1”我将如何在HTMLTank中打印它非常感谢,这是解决方案你好,过去14天我忙于大学和其他事情,现在我又在做它了。我发现它的表现方式并不是目的。我希望也许能再次帮我解决这个问题。每个“zeile”都应该有自己的行,其中包含“methode”、“language1”和“language2”的条目@CoderGerman已编辑,请立即检查