4

有没有一种有效的方法可以使用 python 从该数据中删除重复的“person_id”字段?在这种情况下,只需保留第一次出现。

{
  {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,
  },
}
4

4 回答 4

10

假设您的 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) ]
于 2013-06-12T22:37:56.580 回答
5

这是一个保留输入 json 对象的顺序并保持具有相同 id 的对象的第一次出现的实现:

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
    }
  }
]
于 2013-06-12T23:01:32.903 回答
-3

(如果你有有效的 json)

from simplejson import loads, dumps
dumps(loads(my_json))
于 2013-06-12T22:32:36.810 回答
-4

这不是有效的 JSON。在有效的 JSON(数组)上,您可以使用 jQuery $.each 并查看 Obj_id 以查找和删除重复项。

像这样的东西:

$.each(myArrayOfObjects, function(i, v)
{
      // check for duplicate and add non-repeatings to a new array
});
于 2013-06-12T22:36:22.157 回答