Как удалить свойство в объекте JSON - PullRequest
1 голос
/ 26 апреля 2019

У меня есть ответ JSON, и мне нужно удалить свойство, включающее значение, и добавить его в новый список, проанализированный в объекте JSON в качестве ответа.

Ответ JSON:

 [
    {
        "bookmark": "bla",
        "entity_name": "aag",
        "id": 56
    },
    {
        "bookmark": "ag",
        "entity_name": "dsg",
        "id": 34
    },
    {
        "bookmark": "agds",
        "entity_name": "dsaga",
        "id": 12
    }
   ...
]

Я хочу исправить это, но объединить некоторые из его свойств (например, «закладка») и отправить его обратно как JSON объект.

Это так.

[
    {
        "entity_name": "aag",
        "id": 56
    },
    {

        "entity_name": "dsg",
        "id": 34
    },
    {

        "entity_name": "dsaga",
        "id": 12
    }
    ...
]

Я пробовал много способов, но не могу получить желаемый результат, как указано выше.

если новый список похож на выше:

return jsonify(newList)

Любые предложения будут очень полезны. Спасибо

Ответы [ 4 ]

2 голосов
/ 26 апреля 2019

Используйте библиотеку json:

data = ...  # put your JSON object here

result = json.dumps([{k: v for k, v in d.items() if k != 'bookmark'} 
                     for d in json.loads(data)])
print(result)

Вывод:

[
  {"entity_name": "aag", "id": 56}, 
  {"entity_name": "dsg", "id": 34}, 
  {"entity_name": "dsaga", "id": 12}
]

Для этого решения есть несколько шагов.

Сначала, если ваш вводявляется объектом JSON, то он должен быть преобразован в соответствующий объект Python (обычно вложенный dict или list).Это делается с помощью json.loads (я помню это как «строка загрузки JSON»).

Далее мы можем использовать простое понимание , чтобы получить желаемый результат, который является list того же размера, просто с ключом 'bookmark' из каждого dict в нем.Используемое понимание эквивалентно следующему:

loaded = json.loads(data)

result = []

for d in result:
    new_d = {}
    for key, value in d.items():
        if key != 'bookmark':
            new_d[key] = value

    result.append(new_d)

Наконец, конечно, мы конвертируем наш результат обратно в объект JSON с json.dumps.

1 голос
/ 26 апреля 2019

Для python

Вы можете использовать del Оператор

Используя ваш пример

_collections = [{
    'bookmark': 'bookmark',
    'entity_name': "aag",
    'id': 56
},
{
    'bookmark': 'bookmark',
    'entity_name': "aag",
    'id': 56
},
{
    'bookmark': 'bookmark',
    'entity_name': "aag",
    'id': 56
}
]

for item in _collections:
    del item["bookmark"]

print(_collections)

Для javascript

Вы можетеиспользуйте оператор delete.

Используя ваш пример:

var _firstCollection =  [
    {
        "bookmark": "bla",
        "entity_name": "aag",
        "id": 56
    },
    {
        "bookmark": "ag",
        "entity_name": "dsg",
        "id": 34
    },
    {
        "bookmark": "agds",
        "entity_name": "dsaga",
        "id": 12
    }
];

_firstCollection.forEach(item => {
   delete item.bookmark; // removes bookmark property of every item
});
console.log(_firstCollection);
0 голосов
/ 26 апреля 2019
#You can do this without using json library as well-

mySourceList=[{"bookmark": "bla","entity_name": "aag","id": 56},{"bookmark": "ag","entity_name": "dsg","id": 34},{"bookmark": "agds","entity_name": "dsaga","id": 12}]

myTargetList=[]

for dict in mySourceList:
    myTempList=[]
    myTempDict={}
    for key,value in dict.items():
        if(key in ["entity_name","id"]):
            myTempList.append((key,value))
    myTempDict.update(myTempList)
    myTargetList.append(myTempDict)

print(myTargetList)

#O/P- [{'entity_name': 'aag', 'id': 56}, {'entity_name': 'dsg', 'id': 34}, {'entity_name': 'dsaga', 'id': 12}]

0 голосов
/ 26 апреля 2019

Вы можете использовать pop при переборе своих данных.

import json
entities = [
    {
        "bookmark": "bla",
        "entity_name": "aag",
        "id": 56
    },
    {
        "bookmark": "ag",
        "entity_name": "dsg",
        "id": 34
    },
    {
        "bookmark": "agds",
        "entity_name": "dsaga",
        "id": 12
    }
]

for entity in entities:
  entity.pop("bookmark")

print(json.dumps(entities))

N.B. Если вы хотите отфильтровать несколько ключей, вы можете сделать:

for entity in entities:
    for key in ["bookmark", "foo", "bar"]:
        entity.pop(key)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...