Что я могу сделать, если данные, которые я хочу записать в файл Json, структурированы неправильно?

#python #json #api

#python #json #API

Вопрос:

Я пытаюсь извлечь данные с помощью API и Python, а затем сохранить их в файле Json.

К сожалению, API возвращает очень плохо структурированные данные, поэтому я не могу выполнить программный поиск в файле.

Тогда данные выглядят примерно так:

 {
  "data": [
    [
      [],
      null
    ],
    [
      [
        {
          "1. symbol": "YI",
          "2. name": "111 Inc.",
          "3. type": "Equity",
          "4. region": "United States",
          "5. marketOpen": "09:30",
          "6. marketClose": "16:00",
          "7. timezone": "UTC-05",
          "8. currency": "USD",
          "9. matchScore": "0.3636"
        }
      ],
      null
    ],
    [
      [
        {
          "1. symbol": "2GB.DEX",
          "2. name": "2G Energy AG",
          "3. type": "Equity",
          "4. region": "XETRA",
          "5. marketOpen": "08:00",
          "6. marketClose": "20:00",
          "7. timezone": "UTC 02",
          "8. currency": "EUR",
          "9. matchScore": "0.5714"
        },
        {
          "1. symbol": "2GL.FRK",
          "2. name": "Gaming and Leisure Properties Inc.",
          "3. type": "Equity",
          "4. region": "Frankfurt",
          "5. marketOpen": "08:00",
          "6. marketClose": "20:00",
          "7. timezone": "UTC 02",
          "8. currency": "EUR",
          "9. matchScore": "0.5714"
        }
      ],
      null
    ]
  ]
}
  

Мне удается отфильтровать None до его сохранения, но скобки остаются и разрушают структуру.

Кто-нибудь знает, как я могу хорошо структурировать эти данные? Я использую Python 3.8

Комментарии:

1. Что вы считаете «хорошо структурированным»? Что вы пытались сделать, чтобы получить данные для желаемого вывода?

Ответ №1:

Ваша структура json идеальна, просто используйте json библиотеку для правильной обработки данных:

 import json

data = """{
  "data": [
    [
      [],
      null
    ],
    [
      [
        {
          "1. symbol": "YI",
          "2. name": "111 Inc.",
          "3. type": "Equity",
          "4. region": "United States",
          "5. marketOpen": "09:30",
          "6. marketClose": "16:00",
          "7. timezone": "UTC-05",
          "8. currency": "USD",
          "9. matchScore": "0.3636"
        }
      ],
      null
    ],
    [
      [
        {
          "1. symbol": "2GB.DEX",
          "2. name": "2G Energy AG",
          "3. type": "Equity",
          "4. region": "XETRA",
          "5. marketOpen": "08:00",
          "6. marketClose": "20:00",
          "7. timezone": "UTC 02",
          "8. currency": "EUR",
          "9. matchScore": "0.5714"
        },
        {
          "1. symbol": "2GL.FRK",
          "2. name": "Gaming and Leisure Properties Inc.",
          "3. type": "Equity",
          "4. region": "Frankfurt",
          "5. marketOpen": "08:00",
          "6. marketClose": "20:00",
          "7. timezone": "UTC 02",
          "8. currency": "EUR",
          "9. matchScore": "0.5714"
        }
      ],
      null
    ]
  ]
}"""

data_json = json.loads(data)
  

Вывод

 {'data': [[[], None],
  [[{'1. symbol': 'YI',
     '2. name': '111 Inc.',
     '3. type': 'Equity',
     '4. region': 'United States',
     '5. marketOpen': '09:30',
     '6. marketClose': '16:00',
     '7. timezone': 'UTC-05',
     '8. currency': 'USD',
     '9. matchScore': '0.3636'}],
   None],
  [[{'1. symbol': '2GB.DEX',
     '2. name': '2G Energy AG',
     '3. type': 'Equity',
     '4. region': 'XETRA',
     '5. marketOpen': '08:00',
     '6. marketClose': '20:00',
     '7. timezone': 'UTC 02',
     '8. currency': 'EUR',
     '9. matchScore': '0.5714'},
    {'1. symbol': '2GL.FRK',
     '2. name': 'Gaming and Leisure Properties Inc.',
     '3. type': 'Equity',
     '4. region': 'Frankfurt',
     '5. marketOpen': '08:00',
     '6. marketClose': '20:00',
     '7. timezone': 'UTC 02',
     '8. currency': 'EUR',
     '9. matchScore': '0.5714'}],
   None]]}
  

Ответ №2:

Что ж, здесь определенно есть шаблон. В основном, структура данных выглядит следующим образом:

 {
   "data":[ 
        [[<values you look for>], null],
        [[<values you look for>], null]
    ]
}
  

Из вопросов неясно, что должно быть там, где null находится, поэтому я проигнорирую эту часть.

Чтобы извлечь остальное, это сделает работу:

 flat_data = []
for data in response['data']:
    flat_data  = data[0]
  

Вы получите плоский список dicts.

Комментарии:

1. Я не знаю, почему существует это значение null, это была моя проблема. И я не видел шаблона, так что спасибо, сэр 🙂