Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 访问特定的JSON数据_Python_Json_Flask - Fatal编程技术网

Python 访问特定的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”, “结束”

我正在尝试访问“protocol1”中的“dataset”或“protocol1”中的“log”中的“zeile”。但是我不能让它工作

我尝试了嵌套for循环,但没有成功

这是我的JSON文件

{
“数据”:[
{
“协议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已编辑,请立即检查