访问特定的JSON数据

2024-04-19 13:49:21 发布

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

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

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

这是我的JSON文件

{
    "data": [
        {
            "protocol1": {
                    "dataset": "Testdataset1",
                    "eingangssprache": "Testeingangssprache1",
                    "ausgangssprache": "Testausgangssprache1",
                    "start": "13/01/2021 04:22 1",
                    "end": "14/01/2021 16:20 1"
                },
                    "log": [
                    {
                        "zeile": "01",
                        "methode": "lang detect",
                        "language1": "german",
                        "language2": "english"
                    },
                    {
                        "zeile": "02",
                        "methode": "lang detect",
                        "language1": "german",
                        "language2": "english"
                    },
                    {
                        "zeile": "03",
                        "methode": "lang detect",
                        "language1": "german",
                        "language2": "english"
                    }
                    ]
                },
        {
            "protocol2": {
                    "dataset": "Testdataset2",
                    "eingangssprache": "Testeingangssprache1",
                    "ausgangssprache": "Testausgangssprache1",
                    "start": "13/01/2021 04:22 1",
                    "end": "14/01/2021 16:20 1"
            },
                "log": [
               {
                        "zeile": "01",
                        "methode": "lang detect es",
                        "language1": " es",
                        "language2": "english es"
                    },
                    {
                        "zeile": "01",
                        "methode": "lang detect",
                        "language1": "german es",
                        "language2": "engli essh"
                    },
                    {
                        "zeile": "01",
                        "methode": "lang dete esct",
                        "language1": "germa esn",
                        "language2": "engli essh"
                    }
                ]
        }
    ]
}

也许有人知道怎么做? 我用的是金杯


以前是这样的

{
    "data": [
        {
            "ausgangssprache": "Testout",
            "dataset": "Test",
            "eingangssprache": "Testin",
            "end": "14/01/2021 00:00",
            "start": "13/01/2021 04:22",
            "zeile": "45",
            "methode": "language detection",
            "language1": "Testin",
            "language2": "TestLlang",
            "zusammenfassung": "Zsf"
        }
    ]
}

我可以用这个html代码访问这个JSON

{% for i in data_protocol %}
                                    <tr>
                                        <td>{{ i.dataset }}</td>
                                        <td>{{ i.eingangssprache }}</td>
                                        <td>{{ i.ausgangssprache }}</td>
                                        <td>{{ i.start }}</td>
                                        <td>{{ i.end }}</td>

                                        <td>
......stuff ...
                                    {% endfor %}

返回json文件的python代码如下

json_file = open("data/table.json", "r")
    data = json.load(json_file)
    json_file.close()
    data = data['data']
    return render_template('index.html',
                           column_names=['Dataset', 'Eingangssprache', 'Ausgangssprache', 'Startzeit', 'Endzeit', 'LOG'],
                           data_protocol=data)

我希望你能帮我,提前谢谢


Tags: jsonlangdatastartdatasettdenddetect
1条回答
网友
1楼 · 发布于 2024-04-19 13:49:21

您可以简化数据,而不是使用jinja2解决问题。下面是我用来简化data_set的代码:

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

total_dict运行此代码后,字典将如下所示:

{
    '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']

相关问题 更多 >