Удалить дубликаты из данных JSON

Есть ли эффективный способ удаления дубликатов?person_id» поля из этих данных с python? В этом случае просто сохраните первое вхождение.

{
  {obj_id: 123,
    location: {
      x: 123,
      y: 323,
  },
  {obj_id: 13,
    location: {
      x: 23,
      y: 333,
  },
 {obj_id: 123,
    location: {
      x: 122,
      y: 133,
  },
}

Должно стать:

{
  {obj_id: 123,
    location: {
      x: 123,
      y: 323,
  },
  {obj_id: 13,
    location: {
      x: 23,
      y: 333,
  },
}
 Andy Hayden13 июн. 2013 г., 00:29
Кроме того, те, кто неТ действительно дублирует ...
 Dan Allan13 июн. 2013 г., 00:26
set() поможет.
 Jared13 июн. 2013 г., 00:24
Это н'т действительный JSON. Можете ли вы опубликовать свои фактические данные?

Ответы на вопрос(4)

Решение Вопроса

что ваш JSON является допустимым синтаксисом, и вы действительно запрашиваете помощь дляPython вам нужно будет сделать что-то вроде этого

import json
ds = json.loads(json_data_string) #this contains the json
unique_stuff = { each['obj_id'] : each for each in ds }.values()

если вы хотите всегда сохранять первое вхождение, вам нужно будет сделать что-то подобное

all_ids = [ each['obj_id'] for each in ds ] # get 'ds' from above snippet
unique_stuff = [ ds[ all_ids.index(id) ] for id in set(ids) ]
 lqc13 июн. 2013 г., 00:44
Предполагая,ds это массив словарей (как таковой(вариант, который имеет больше смысла), это работает хорошо, но сохраняет последнее вхождение вместо первого.
 Kalyan0223 нояб. 2016 г., 13:27
@Sevenearthsjson.loads(...) загружает из строки (загружает: загружает строку);json.load(...) загружается из обработчика файла (илиread() поддержка файлового объекта)
 Sevenearths18 нояб. 2016 г., 10:20
В чем разница междуjson.loads(...) а также ?json.load(...)
 Kalyan0213 июн. 2013 г., 01:08
@lqc отредактировал и исправил это
 jfs13 июн. 2013 г., 01:09
+1: элегантный (первый пример). Хоть /.values()set() может возвращать объекты в любом порядке. Предполагая, что входные данные являются массивом json, это может иметь значение. Воталгоритм сохранения порядка
 jfs13 июн. 2013 г., 01:11
микро-придираться:obj а такжеjson_array может быть лучше, чем именаeach а такжеds

(если у вас был действительный JSON)

from simplejson import loads, dumps
dumps(loads(my_json))
 lqc13 июн. 2013 г., 00:48
Как вы можете знать, что это будет делать что-нибудь, если вы нене знаете, как выглядит правильный ввод?
 lqc13 июн. 2013 г., 00:39
Это'Неверно JSON!ideone.com/ofgvhd
 rikAtee13 июн. 2013 г., 00:56
Название вопроса "Удалить дубликаты из данных JSON ", Я caveat'd "если действительный JSON и предоставил ответ. Это то, что все остальные в вопросе тоже сделали.

s реализация, которая сохраняет порядок входных объектов json и сохраняет первое вхождение объектов с одинаковым идентификатором:

import json
import sys
from collections import OrderedDict

L = json.load(sys.stdin, object_pairs_hook=OrderedDict)
seen = OrderedDict()
for d in L:
    oid = d["obj_id"]
    if oid not in seen:
        seen[oid] = d

json.dump(seen.values(), sys.stdout,  indent=2)
вход
[
  {
    "obj_id": 123, 
    "location": {
      "x": 123, 
      "y": 323
    }
  }, 
  {
    "obj_id": 13, 
    "location": {
      "x": 23, 
      "y": 333
    }
  }, 
  {
    "obj_id": 123, 
    "location": {
      "x": 122, 
      "y": 133
    }
  }
]
Выход
[
  {
    "obj_id": 123, 
    "location": {
      "x": 123, 
      "y": 323
    }
  }, 
  {
    "obj_id": 13, 
    "location": {
      "x": 23, 
      "y": 333
    }
  }
]

вать jQuery $ .each и посмотреть Obj_id, чтобы найти и удалить дубликаты.

Что-то вроде этого:

$.each(myArrayOfObjects, function(i, v)
{
      // check for duplicate and add non-repeatings to a new array
});
 lqc13 июн. 2013 г., 00:40
Вы пропустилиpython тег. Не все вещи в мире - это JQuery.

Ваш ответ на вопрос