Схема JSON в CSV - PullRequest
       19

Схема JSON в CSV

2 голосов
/ 23 июня 2011

У меня есть некоторые JSON-структуры данных банковских счетов, которые я экспортирую в виде файлов CSV, чтобы открыть их в Microsoft Excel.JSON для каждой учетной записи:

{
  "apy": 2.0,
  "product_type": "Investors Checking",
  "features":  {
    "ATM_FEES": "Refunded",
    "ATM_CARD_AVAILABLE": "Yes",
    "SIMPLY_MAINTAIN_A_MONTHLY_BALANCE_OF": "$10,000"
  },
  "min_investment": "",
  "max_investment": 20000,
  "institution_type": "Credit Union",
  "institution_num": 11307,
  "institution": "Apple Federal Credit Union"
}

Я могу хорошо экспортировать его со столбцами для всего, кроме словаря «функций».Это заканчивается как столбец, содержащий объект:

{
  "ATM_FEES": "Refunded",
  "ATM_CARD_AVAILABLE": "Yes",
  "SIMPLY_MAINTAIN_A_MONTHLY_BALANCE_OF": "$10,000"
}

Для любого данного банка, dict возможностей может быть любой произвольной длины с различными функциями.Я в основном имею опыт работы с документно-ориентированными базами данных (MongoDB).

Как мне построить реляционную схему для тех же данных?

Ответы [ 2 ]

3 голосов
/ 23 июня 2011

Здесь CSV и реляционная структура не совпадают.CSV может иметь произвольное количество полей с каждым элементом в виде отдельного столбца.В базе данных отношений вы бы сделали это по-другому.Я бы предложил таблицу для основных данных и одну для функций.Примерно так:

таблица BANK_ACCOUNT_INFO:

  • ID
  • apy
  • product_type
  • min_investment
  • max_investment
  • тип учреждения
  • номер учреждения
  • учреждение

таблица BANK_ACCOUNT_FEATURES:

  • ID
  • BANK_ACCOUNT_ID
  • FEATURE_NAME
  • FEATURE_VALUE

1 запись в базовой таблице может быть связана с несколькими записями в таблице функций.

0 голосов
/ 02 сентября 2017

Вот решение с использованием jq

def headers:
    keys_unsorted[] as $k
  | if   .[$k]|type == "object" then (.[$k]|headers)
    else $k
    end
;

def data:
    keys_unsorted[] as $k
  | if   .[$k]|type == "object" then (.[$k]|data)
    else .[$k]
    end
;

  (.[0] | [headers])
, (.[]  | [data])
| @csv

Если filter.jq содержит этот фильтр, а data.json содержит данные выборки, то

$ jq -Mrs -f filter.jq data.json

будет производить

"apy","product_type","ATM_FEES","ATM_CARD_AVAILABLE","SIMPLY_MAINTAIN_A_MONTHLY_BALANCE_OF","min_investment","max_investment","institution_type","institution_num","institution"
2,"Investors Checking","Refunded","Yes","$10,000","",20000,"Credit Union",11307,"Apple Federal Credit Union"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...