Python向Dict添加了对象

Python向Dict添加了对象,python,json,dictionary,collections,Python,Json,Dictionary,Collections,我有一个JSON对象,我想添加到现有的JSON对象中。当我添加对象时,它被添加到JSON的底部,即使代码首先添加了新对象 下面是一个JSON的示例 { "Header": { "ID": "Bob", "Description": "Description header_dict" }, "Body": { "ItemInvolvesShortfall": { "SpecifiedBy": {

我有一个JSON对象,我想添加到现有的JSON对象中。当我添加对象时,它被添加到JSON的底部,即使代码首先添加了新对象

下面是一个JSON的示例

{
    "Header": {
        "ID": "Bob",
        "Description": "Description header_dict"
    },
    "Body": {
        "ItemInvolvesShortfall": {
            "SpecifiedBy": {
                "category": "Fibre To The Node",
                "version": "1.2.0",
                "type": "Shortfall Specification",
                "ID": "FTTN Shortfall"
            },
            "DescribedBy": {
                "Characteristic": {
                    "type": "Automatically fulfillable",
                    "ID": "pillar-patch"
                },
                "value": "Yes"
            }
        },
        "ID": "Bob",
        "Description": "Description body_dict"
    }
}
这就是我想要JSON的样子。ID和说明应位于ItemInvolvesShortfall之前

….
"Body": {
        "ID": "Bob",
        "Description": "Description body_dict",
"ItemInvolvesShortfall": {
            "SpecifiedBy": {
                "category": "Fibre To The Node",
                "version": "1.2.0",
                "type": "Shortfall Specification",
                "ID": "FTTN Shortfall"
            },
            "DescribedBy": {
                "Characteristic": {
                    "type": "Automatically fulfillable",
                    "ID": "pillar-patch"
                },
                "value": "Yes"
            }
        }
    }
这是代码片段

#!/usr/bin/env python
import json
import objectpath
import collections
#READ JSON OFF DISK
data = json.loads(open("/Users/AAAAAAAAAA/Documents/Python/Tuples/json/FTTN.json").read())
json_tree = objectpath.Tree(data['ManageTicketOfWorkRequest'])
#LOOK FOR A JSON OBJECT - ItemInvolvesShortfall
result = tuple(json_tree.execute('$..ItemInvolvesShortfall'))
new_dict=collections.OrderedDict()
header_dict={}
body_dict=collections.OrderedDict()

# CREATE HEADER   
header_dict["Header"]={
    "ID":"Bob",
    "Description":"Description header_dict" }

# CREATE BODY        
body_dict={"Body":{
    "ID":"Bob",
    "Description":"Description body_dict" }
    }

#ADD BODY INTO NEW DICTIONARY
new_dict.update(header_dict)
for i in result:

    #ADD THE ITEMINVOLVESSHORTFALL INTO BODY. THE ID & DESCRIPTION 
    #WHICH IS FIRST, NOT BE PUSH BACK. SHOULD I USE A POP OR POP_LEFT 
    #OR USE A APPEND OR APPEND_LEFT
    body_dict["Body"]["ItemInvolvesShortfall"]=i
    print('INFO:04 ', a)
    print(body_dict)

new_dict.update(body_dict)
print(" ", body_dict)
print("INFO05: ", body_dict)
new_dict.update(body_dict)
print("INFO06: ", new_dict)

Python(和大多数其他语言)中的词典对它们没有顺序-它们是
key:value
对的集合(无序集合)。因此,认为它们的顺序错误的论点是不正确的,因为数据结构具有顺序的前提是错误的。

为什么要执行
body\u dict=collections.OrderedDict()
,然后在几行之后用普通的
dict
替换?在你的代码末尾,你为什么要做两次
new_dict.update(body_dict)
?FWIW,在JSON中使用
orderedict
没有多大意义。JSON对象(在Python中实现为
dict
)是名称-值对的无序集合。因此,任何处理JSON数据的软件都不能依赖于这些名称-值对的特定顺序,任何处理JSON的工具都不需要在对象中保持顺序。当然,如果你的JSON数据只由你编写的软件读写,你可以随心所欲地使用它。我的想法是,new_dict将是最终转换为JSON的字典。我将在他们自己的字典中创建children JSON对象,并将它们添加到new_dict中。我认为OrderedDict将保留它们添加的顺序。序列是导入的,JSON需要符合客户端api提供的规范。我理解,也许我应该重新表述我的问题,他们JSON对象需要在特定的序列中,它不是按键排序的,但我首先需要ID,然后是描述,最后是ItemInvolvesShortfall。有一个我们需要遵守的规范,在ID和描述不符合规范之前显示ItemInvolvesShortfall。