Экспорт значения JSON в таблицу из Bigquery с правильными кавычками - PullRequest
0 голосов
/ 15 февраля 2019

Я хочу экспортировать значение столбца в Bigquery, чтобы оно выглядело так:

| NAME    | JSON          |
| abc     | {"test": 1}   |

Однако, когда я хочу экспортировать это в сжатый csv / tsv через код Python для облачного хранилища Google споле delimiter = '\ t' (https://google -cloud.readthedocs.io / en / latest / bigquery / generate / google.cloud.bigquery.client.Client.extract_table.html ), я всегда получаючто-то вроде:

| NAME    | JSON            | 
| abc     | "{""test"": 1}" |

Я знаю о побеге, и я пробовал много возможностей с побегом (используя "" для выхода из "или добавления -значений), но я не могу получитьэкспорт как:

{"test": 1}

Пожалуйста, помогите мне?

1 Ответ

0 голосов
/ 17 февраля 2019

Вывод инструмента правильный, но вам нужно прочитать RFC 4180 , стандарт для файлов CSV, чтобы понять, почему.

В основном, JSON spec говорит, что test должен иметь двойные кавычки, то есть "test".

Двойные кавычки по всему полю допускаются в CSV.Но в спецификации CSV также сказано, что в CSV с полями в кавычках внутренняя кавычка дублируется.Это правило 7 раздела 2 RFC 4180:

Если для заключения полей используются двойные кавычки, то двойная кавычка, появляющаяся внутри поля, должна быть экранирована, предшествуя другой двойной кавычке.Например:

"aaa", "b" "bb", "ccc"

Так, каково решение?

Возможновам нужен читатель CSV, совместимый с RFC 4180, так что вы не пишете код синтаксического анализа самостоятельно, где используется файл.

Вы можете заменить двойные двойные кавычки одинарными двойными кавычками, а кавычки в скобкахничего подобного:

sed -e 's/"{/{/g; s/}"/}/g; s/""/"/g;' in.csv > out.csv

преобразование

"{""test"": 1}"

в

{ "test": 1}

или с использованием String.replace в JavaScript, но полученный CSV-файл НЕ соответствует RFC 4180.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...