2015-04-27 2 views
0

У меня проблема, и я не могу найти хороший способ справиться с ней. Я приведу пример.Обработка вложенных массивов/Список в возврате JSON с помощью fjsonparser в Vertica

Скажем, я делаю вызов API для Amtrack с помощью запросов Python для получения информации об их билетах. Возвращение возвращается в формате JSON как это:

{ 
    "tickets": [ 
    { 
     "id":    12345, 
     "external_id":  "abcdefg", 
     "created_at":  "2015-04-27T22:55:29Z", 
     "updated_at":  "2015-04-27T10:38:52Z", 
     "type":    "commuter", 
     "priority":   "high", 
     "status":   "open", 
     "recipient":  "Amanda", 
     "requester_id":  1234567, 
     "route_id":  1234567, 
     "tags":    ["round-trip", "commuter"], 
     "via": { 
     "channel": "web" 
     }, 
     "custom_fields": [ 
     { 
      "id": 27642, 
      "value": "Commuter Ticket" 
     }, 
     { 
      "id": 27648, 
      "value": "reoccuring charge" 
     } 
     ], 

    } 
} 

Я генерации файла JSON около 1 млн билетов.

Я хочу поместить это в таблицу Vertica, поэтому я использую встроенный fjsonparser, и он отлично подходит, за исключением ключа Custom_Fields. Я могу получить его в таблицу, но столбец заполнен едва удобочитаемым мусором, который я даже не могу вставить в текст здесь.

Я пытаюсь найти хороший способ справиться с этим. Мне нужны данные внутри Custom_Fields, но из-за форматирования анализ его как строки невозможен. Я подумал о добавлении всех настраиваемых полей в свой собственный JSON-файл, когда я пишу в файл после API-интерфейса. Что-то вроде:

CF_list = data['tickets']['custom_fields'] 

with open(filePath, mode='w') as F: 
     json.dump(CF_list, F) 

Проблема здесь заключается в том, что у меня не будет никакого способа завязывания Custom_Fields назад к билету они пришли. Мне нужна помощь.

Спасибо!

ответ

2

Добавить flatten_arrays=true в FJSONPARSER. Это сгладит вложенные массивы.