如何将字符串附加到JSON fi

2024-04-23 23:22:34 发布

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

我正在尝试将两个字符串变量附加到一个JSON文件中,但在实现这一点时遇到了问题。你知道吗

这是我的密码:

with open('/tmp/' + thisFile, 'w') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames = ['sim_id', 'data'], delimiter = '\t', lineterminator = '\n')
        counter = 0
        for issue in results.issues:
            counter += 1
            issueMainId = issue.main_id
            print('Writer written line ' + str(counter) + ' issue_id: ' + issueMainId)
            assignedFolderId = (issue.assigned_folder.decode('utf-8'))[:1500]
            print('Writer written line ' + str(counter) + ' folder: ' + assignedFolderId)
            for label in issue.labels:
                labelText = sim.get_label(label.get('id')).label[0]['text']
                print('Writer written line ' + str(counter) + ' Label: ' + labelText)
            folderText = sim.get_folder(flat_attr(issue.assigned_folder)).label[0]['text']
            print('Writer written line ' + str(counter) + ' Folder: ' + folderText)
            print('Writer written line ' + str(counter) + ' labels: ' +     '-'.join(str(v) for v in issue.labels))
            writer.writerow({
                'sim_id': issueMainId,
                'data': json.dumps({
                    a: flat_attr(getattr(issue, a)) for a in dir(issue) if a in attr_list
                })
            })

对于writerow()函数中的'data',我想添加两个属性,这两个属性保存在上面的两个变量(folderText和labelText)中,这样我在数据字段中又得到了两个类似{“folderName”:folderText,“labelName”:labelText}

有人知道怎么做吗?你知道吗


Tags: inidforlinecounterissuesimfolder
1条回答
网友
1楼 · 发布于 2024-04-23 23:22:34

按原样,参数json.dumps文件是一个dict理解,因此不能只向它添加键/值对,因为它不是dict文本。您要做的是首先创建一个包含“硬编码”项的dict:

data = {"folderName": folderText, "labelName": labelText}

然后将当前的理解内容与之合并:

data.update((a, flat_attr(getattr(issue, a))) for a in dir(issue) if a in attr_list)

最后将最终结果传递给dumps

writer.writerow({
    'sim_id': issueMainId,
    'data': json.dumps(data)
})

请注意,如果发生冲突,这将用理解覆盖硬编码数据。您也可以更新理解结果:

data = {
    a: flat_attr(getattr(issue, a)) for a in dir(issue) if a in attr_list
}
data['folderName'] = folderText
data['labelName'] = labelText

第三种选择是使用dictionary unpacking,但在这种特定情况下,这似乎不是一种改进:

writer.writerow({
    'sim_id': issueMainId,
    'data': json.dumps({
        **{ a: flat_attr(getattr(issue, a)) for a in dir(issue) if a in attr_list },
        'folderName': folderText,
        'labelName': labelText
    })
})

相关问题 更多 >