Python按名称对包含大量数组的JSON文件进行排序

Python按名称对包含大量数组的JSON文件进行排序,python,json,sorting,Python,Json,Sorting,我有一个JSON文件,看起来像这样,只有一个元素: [ { “测试1”:[ { “选中”:[ “对” ], “说明”:[ “asdasd” ], “文件名”:[ “GT-002” ], “imgLoc”:[ “/Images/GT-002.png” ], “材料”:[ 6. ], “数量”:[ 1. ] } ] } ] 我需要一些方法来按照fileName对我的大JSON文件进行排序。现在这一切都很奇怪和随机,对我来说什么都不管用 test1和test具有相同数量的项目,但例如非批量具有更多的

我有一个JSON文件,看起来像这样,只有一个元素:

[
{
“测试1”:[
{
“选中”:[
“对”
],
“说明”:[
“asdasd”
],
“文件名”:[
“GT-002”
],
“imgLoc”:[
“/Images/GT-002.png”
],
“材料”:[
6.
],
“数量”:[
1.
]
}
]
}
]
我需要一些方法来按照
fileName
对我的大JSON文件进行排序。现在这一切都很奇怪和随机,对我来说什么都不管用

test1
test
具有相同数量的项目,但例如
非批量
具有更多的项目,当它们分开时,我找不到任何方法对它们进行正确排序

我尝试了以下代码:

导入json
Data_JSON='Data.JSON'
批次名称='非批次'
以open(Data_JSON)作为文件:
Data\u JSON\u Contents=JSON.load(文件)
sortedList=sorted(数据内容,key=lambda i:i[BATCH\u NAME][0]['fileName'])
使用open(Data_JSON,mode='w+',encoding='utf-8')作为文件:
dump(sortedList,file,确保ascii=True,indent=4,sort\u keys=True)
如果有人知道任何工具或库或正确的方法,我会非常感激,我已经用
natsort
尝试过一些东西,例如:

从natsort导入natsort\u密钥
natsort\u key=natsort\u keygen()
数据内容[0][BATCH\u NAME][0]。排序(key=natsort\u key)
或者类似的东西,但对我来说什么都不管用

data.json

[{“非批量”:[{“已检查”:[“真”],“说明”:[“”],“文件名”:[“GT-003”],“imgLoc”:[“/Images/GT-003.png”],“材料”:[0],“数量”:[1]},{“已检查”:[“假”],“说明”:[“”],“文件名”:[“GT:[“GT-013”],“imgLoc”:[“/Images/GT-013.png”],“material”:[0],“quantity”:[1],{“checked”:[“False”],“description”:[”“],“fileName”:[“GT-006”],“imgLoc”:[“/Images/GT-006.png”],“material”:[0],“quantity”:[1],{“checked”:[“True”,“description”:[“description”:[”,“fileName”:“GT-007”,“imgLoc”:“,“Images:[1],[1],[1],[1],[1],[1],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],[3],“imgLoc”:[“/Images/GT-004.png”],“material”:[0],“quantity”:[1],{“checked”:[“True”],“description”:[”“],“fileName”:[“GT-008”],“imgLoc”:[“/Images/GT-008.png”],“material”:[9],“quantity”:[1],{“checked”:[“description”:[”“],“description”:[”,“fileName”:[“GT-010”,“fileName”:[“/Images/GT-010.png”],“material[6],“material],“test],[1],[1],[1],[1],[1],[1],[“:[{”选中“:[”假“],”说明“:[”asdsad“],”文件名“:[”GT-001“],”imgLoc“:[”/Images/GT-001.png“],”材料“:[11],”数量“:[1]}],”test1“:[”选中“:”真“,”说明“:[”asdasd“,”文件名“:[”GT-002“,”imgLoc“:[”/Images/GT-002.png“,”材料“,”数量“:[1]}]

我通过将所有内容合并成一个元组,然后使用
natsort
对其排序,然后将其“缝合”在一起,成功地将解决方案缝合在一起

代码如下:

导入json
从natsort导入natsort\U keygen
natsort\u key=natsort\u keygen()
Data_JSON='Data.JSON'
批次名称='非批次'
文件名=[]
图像_位置=[]
数量=[]
description=[]
选中标记=[]
材料=[]
def合并(*args):
为范围(len(args[0])中的i返回[(args[0][i]、args[1][i]、args[2][i]、args[3][i]、args[4][i]、args[5][i])
以open(Data_JSON)作为文件:
Data\u JSON\u Contents=JSON.load(文件)
对于数据内容[0][BATCH\u NAME]中的项:
文件名。追加(项['fileName'][0])
图像位置。追加(项['imgLoc'][0])
数量。追加(项目['quantity'][0])
description.append(项['description'][0])
选中标记。追加(项['checked'][0])
物料。追加(物料['material'][0]项)
合并=排序(合并(文件名、图像位置、数量、,
说明,勾选标记,材料),键=natsort\U键)
对于枚举中的i,j(文件名):
数据内容[0][BATCH\u NAME].pop(0)
数据\u JSON\u内容[0][BATCH\u NAME]。追加({
“文件名”:[合并的[i][0]],
“imgLoc”:[合并[i][1]],
“数量”:[int(合并[i][2]),
'说明':[合并[i][3]],
“选中”:[合并[i][4]],
“材料”:[合并[i][5]]
})
使用open(Data_JSON,mode='w+',encoding='utf-8')作为文件:
dump(数据、内容、文件、,
确保(ascii=True,缩进=4)

它虽然不是整洁的代码,也不是经过优化的代码,但它是有效的。如果有人对如何使它更好、更“流畅”有一些建议,我会非常乐意使用它。

为什么要使用natsort?这里显示的数据似乎不需要自然排序。我想我会尝试一下,看看我是否“可以”使用它,我没有使用它。我刚刚试过。好的,仅供参考,您的输入数据已经排序。我的数据不是按
文件名
排序的,例如,在
非批处理
中,第三个元素('GT-013')应该在该部分的末尾。不接近顶部。