Получить первые значения из файла JSON в Django / Python - PullRequest
0 голосов
/ 04 февраля 2020

В моем проекте python django есть следующий файл JSON:

{
  "id": 1,
  "name": "test (replaced)",
  "code": "test",
  "last_update": "2020-01-01",
  "online": false,
  "data": {
    "temperature": [
      {
        "date": "2019-12-17",
        "value": 23.652905748126333
      },
      ...
    ],
    "humidity": [
      {
        "date": "2019-12-17",
        "value": 23.652905748126333
      },
      ...

Мне нужны все данные, кроме значений в "data". Поэтому мне нужно:

{
  "id": 1,
  "name": "test (replaced)",
  "code": "test",
  "last_update": "2020-01-01",
  "online": false,
  }

Как я могу сделать это наиболее эффективно?

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Вы можете загрузить файл JSON, используя json.loads(), а затем использовать переменную в качестве словаря для доступа к ключам.

Попробуйте, просто укажите правильный путь к файлу JSON:

import json
with open('path_to_file/filename.json') as f:
  data = json.load(f)

id = data["id"]
name = data["name"]
code = data["code"]
last_update = data["last_update"]
online = data["online"]
0 голосов
/ 04 февраля 2020

Вы можете удалить этот ключ с помощью pop()

json_data.pop('data')

или с помощью del

del json_data['data']

или создать другой dict без изменения оригинала json в понимании слова

final_json_data = {k: v for k, v in json_data.items() if k != 'data'}

Когда дело доходит до эффективности, использование del является самым быстрым, но имейте в виду, что оно изменяет ваш оригинальный словарь (оно имеет значение в на случай, если вы захотите получить доступ к data в будущем)

>>> timeit.timeit('a={"data": {}, "k": 123}; a.pop("data")', number=10000)
0.007318258999930549
>>> timeit.timeit('a={"data": {}, "k": 123}; del a["data"]', number=10000)
0.004255927000031079
>>> timeit.timeit('a={"data": {}, "k": 123}; b={k:v for k,v in a.items() if k!="data"}', number=10000)
0.007165654999880644
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...