Python中的JSON转储顺序

2024-06-22 09:28:25 发布

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

我正在尝试使用特定格式写入JSON。我尝试了不同的方法,使json.dump命令写入文件,以了解变量中数据的显示方式。任何建议,如尝试使用OrderDict和排序键,这是以前和在线推荐的

01/07/2020-以下是订单代码和JSON文件的创建代码

    data =[]
    subData=[]
    subData=media_add()
    data.append(OrderedDict(
        {
            "values": [ {
                "CaseID": case_id,
                "CaseMetadata": [
                    {
                        "CaseID":case_id,
                        "PropertyName":case_name,
                        "PropertyValue":case_value
                    }
                ],
                "CaseNumber": case_num,
                "ContactEmail": contact_email,
                "ContactName": contact_name,
                "ContactOrganization": contact_org,
                "ContactPhone": contact_phone,
                "ContactTitle": contact_title,
                "Media": subData,
                
                "TotalMediaFiles": len(final_results),
                "TotalPrecategorized": 0,
                
                "SeizureDate": autData[3][1],
                "SourceApplicationName": "Autopsy",
                "SourceApplicationVersion": autData[5][1]
                }]}))


    # Serializing json  
    json_object = json.dumps(data, indent=5)

    # Writing to json file

    filename= (case_name_fn + " " + date_fn + "." + time_fn + ".json")


    with open(filename, "w") as outfile: 
        json.dump(data, outfile, sort_keys=True, indent = 4, ensure_ascii = False)

更新日期2020年9月4日 下午好,由于特定的需求,Python代码需要用Python 2.7编写。我曾尝试在2.7而不是3.6中像原始代码一样重做上述工作,但是我无法使转储保持在代码中编写的顺序。我已重新尝试使用OrderedDict,但失败

有没有其他方法可以不使用JSON.dump方法创建结构化JSON文件


Tags: 文件方法代码nameidjsondatacontact
1条回答
网友
1楼 · 发布于 2024-06-22 09:28:25

要按插入值的相同顺序打印值,需要执行两项操作:

  • 不要像在转储到文件的示例中那样设置sort_keys=True。这将按字母顺序对它们进行排序,而不是按插入顺序
  • 至少使用Python 3.6

第二个是必要的,因为在Python 3.6之前,字典不记得插入元素的顺序。如果您设置了x = {'a': 1, 'b': 2},然后对其进行迭代,那么您可能会按照'a', 'b''b', 'a'的顺序返回元素。它甚至可能在同一程序的两次运行之间发生变化

如果您坚持使用Python 3.5或更早版本,那么可以使用OrderedDict。我知道你现在就是这么做的。但是您使用{...}文字语法,它将值放在dict中,因此在到达OrderedDict之前,顺序已经丢失。相反,您必须使用列表或元组:

data.append(OrderedDict(
    [
        ["values", [ [
            ["CaseID", case_id],
            ["CaseMetadata", [
                [
                    ["CaseID", case_id],
                    ["PropertyName", case_name],
                    ["PropertyValue", case_value]
                ]

。。。等等正如你所看到的,这是相当微妙的;升级Python版本可能更好。也许您只是偶然使用了Python2.7,因为这通常是在命令提示符下运行python得到的结果。在这种情况下,只需运行python3就可以解决问题

相关问题 更多 >