Нахождение одинаковых параметров в json

Рейтинг: -1Ответов: 1Опубликовано: 03.04.2023

Мне необходимо найти два одинаковых параметра position X, Position Z, и если они будут обнаружены удалить объекты(не параметр, а объект с ним) при помощи python json

{
      "name": "CeilingSkylight",
      "uniqueId": 14863.6865,
      "position": {
        "x": -121.896072,
        "y": -2.105801,
        "z": -0.7743931
      },
      "rotation": {
        "x": 0.9970698,
        "y": -1.63123222E-08,
        "z": -0.07649757,
        "w": 2.05165609E-08
      },
      "isKinematic": true,
      "instantiationData": null,
      "runtimeData": null
    },
    {
      "name": "wall_32",
      "uniqueId": 14648.8867,
      "position": {
        "x": -69.8076,
        "y": -2.08303857,
        "z": -98.8506241
      },
      "rotation": {
        "x": 0.00676841568,
        "y": -0.6764084,
        "z": 0.006090162,
        "w": -0.7364705
      },
      "isKinematic": true,
      "instantiationData": null,
      "runtimeData": null
    }

Уточняю: открыл файл, нашел одинаковые параметры, удалил объект с параметрами.

Код

import json
import os
from sys import exit
print("Please move your map to /storage/emulated/0/Hypper_Maps")
if not os.path.exists("/storage/emulated/0/Hypper_Maps"):
 os.mkdir("/storage/emulated/0/Hypper_Maps")
 
imap = input("map name: ")
map = f"{imap}.svn"
path = f"/storage/emulated/0/Hypper_Maps/{map}"

try:
    with open(path,"r") as osave:
        
        mapData = json.loads(osave.read())
except FileNotFoundError:
        print(f"Can not find {map} in /storage/emulated/0/Hypper_Maps")
        exit()
        

for prop in mapData["props"]:
    #строка 22
    pass
    
    
with open(path, 'w') as save:
 json.dump(mapData, save)
 osave.close()

На строке 22 возникли трудности: я понятия не имею как сравнивать все Position и находить среди них одинаковые значения. Я не умею удалять объекты json. Мне нужно удалить только один дубликат, а не сразу все дубликаты на карте

Ответы

▲ 0

Не совсем понятно, что именно тебе нужно. Ну вот, например так можно убрать все объекты с одинаковыми координатами кроме первого:

coords = set()
out_prop = []
for prop in mapData["props"]:
  pos = prop['position']
  xy = pos['x'], pos['y']
  if xy in coords:
    continue # такие координаты уже были, прокидываем
  coords.add(xy)  
  out_prop.append(prop)

mapData["props"] = out_prop