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