【发布时间】:2021-02-11 11:38:06
【问题描述】:
我有一个带有一个元素的 JSON 文件:
[
{
"test1": [
{
"checked": [
"True"
],
"description": [
"asdasd"
],
"fileName": [
"GT-002"
],
"imgLoc": [
"/Images/GT-002.png"
],
"material": [
6
],
"quantity": [
1
]
}
]
}
]
我需要一些方法来按fileName 对我的大型 JSON 文件进行排序。现在它做的一切都很奇怪和随机,对我没有任何作用。
test1 和 test 具有相同数量的项目,但 NON_BATCH 例如有更多,当它们分开时我找不到任何方法来正确排序。
我已经尝试了以下代码:
import json
Data_JSON = 'data.json'
BATCH_NAME = 'NON_BATCH'
with open(Data_JSON) as file:
Data_JSON_Contents = json.load(file)
sortedList = sorted(Data_JSON_Contents, key=lambda i: i[BATCH_NAME][0]['fileName'])
with open(Data_JSON, mode='w+', encoding='utf-8') as file:
json.dump(sortedList, file, ensure_ascii=True, indent=4, sort_keys=True)
如果有人知道任何工具或库或执行此操作的正确方法,我真的很感激,我已经尝试过 natsort 的事情,例如:
from natsort import natsort_keygen
natsort_key = natsort_keygen()
Data_JSON_Contents[0][BATCH_NAME][0].sort(key=natsort_key)
或者类似的东西,但对我没有任何作用。
data.json
[{"NON_BATCH": [{"checked": ["True"], "description": [""], "fileName": ["GT-003"], "imgLoc": ["/Images/GT-003.png"], "material": [0], "quantity": [1]}, {"checked": ["False"], "description": [""], "fileName": ["GT-005"], "imgLoc": ["/Images/GT-005.png"], "material": [0], "quantity": [1]}, {"checked": ["True"], "description": [""], "fileName": ["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": [""], "fileName": ["GT-007"], "imgLoc": ["/Images/GT-007.png"], "material": [0], "quantity": [1]}, {"checked": ["False"], "description": [""], "fileName": ["GT-012"], "imgLoc": ["/Images/GT-012.png"], "material": [0], "quantity": [1]}, {"checked": ["True"], "description": [""], "fileName": ["GT-009"], "imgLoc": ["/Images/GT-009.png"], "material": [0], "quantity": [1]}, {"checked": ["False"], "description": [""], "fileName": ["GT-004"], "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": ["False"], "description": [""], "fileName": ["GT-010"], "imgLoc": ["/Images/GT-010.png"], "material": [6], "quantity": [1]}], "test": [{"checked": ["False"], "description": ["asdsad"], "fileName": ["GT-001"], "imgLoc": ["/Images/GT-001.png"], "material": [11], "quantity": [1]}], "test1": [{"checked": ["True"], "description": ["asdasd"], "fileName": ["GT-002"], "imgLoc": ["/Images/GT-002.png"], "material": [6], "quantity": [1]}]}]
【问题讨论】:
-
你为什么使用 natsort?此处显示的数据似乎不需要自然排序。
-
我想我会试试看我是否“可以”使用它,我没有使用它。我刚试过。
-
好的,仅供参考,您的输入数据已经排序。
-
我的数据不是按
fileName排序的,例如,在NON_BATCH中,第三个元素('GT-013')应该在该部分的末尾。不在顶部附近。