2016-07-08 3 views
1

Я ищу, как написать новый JSON с разделителями строк, используя Json.Net. Мне нужно сделать это, чтобы иметь возможность экспортировать данные в Google BigQuery. https://cloud.google.com/bigquery/data-formats#json_formatНаписание Newline Delimited Json

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

Я наткнулся на это previous question но ответ только объясняет, как читать строку с разделителями JSon, а не как писать

+0

Если у вас есть код, который сейчас работает, то что вы спрашиваете? Какова конкретная проблема, которую вы хотели бы помочь в решении? – dbc

+0

@dbc Потому что я хочу знать, есть ли лучший способ. Вместо того, чтобы перебирать коллекцию List , я хочу знать, есть ли способ передать мою коллекцию в сериализатор Json, и он может форматировать json так, как мне нужно. –

+0

@JonClarke Любопытно, можете ли вы форматировать/сохранять свой список в новую строку с разделителями JSON? С самого момента мы также делаем то же самое - цикл и сериализацию каждого объекта C#. –

ответ

1

Там нет такого понятия, как символ новой строки с разделителями JSON. То, что вы просите, это хранить объекты JSON в отдельных отдельных строках. Это используется многими большими данными и продукцией обработки событий, в том числе Azure поток Analytics, Улей, Google Биг запроса и т.д.

Этот способ хранения используется потому, что она делает параллельно обработке намного проще:

  • При чтении один файл может быть легко разбит на разделы без фактического синтаксического анализа всего текста и назначается различным потокам или рабочим.
  • Линии могут обрабатываться независимо, не дожидаясь анализа синтаксического анализа всего текста. Это позволяет вам использовать, например, асинхронные операции и/или поток данных для одновременного чтения и анализа
  • При записи несколько потоков могут записывать данные в разные файлы, тогда все файлы могут быть объединены в один. Даже когда вы пишете на одном диске, операционная память ОС и дисков и служебные служебные операции означают, что операции дескриптора X одновременно могут заканчиваться быстрее, чем выполнение операций X последовательно.
  • Каждый рабочий/нить может записывать новую запись напрямую. Для генерации файла парсеру потребуется доступ ко всем записям.

По этой причине не хорошая идея, чтобы использовать анализатор для создания таких файлов, даже если анализатор поддерживает его. Однопоточная реализация будет просто слишком медленной и заставит вас собрать все записи перед их написанием.

Для повышения производительности вы можете написать несколько файлов, предпочтительно на отдельных дисках, и объединить все файлы в один в конце. Вы также можете записывать каждую запись по мере ее создания, а не ждать, чтобы загрузить все их в память, прежде чем записывать их.

+0

Существует формат, называемый точно Newline Delimited JSON: http://ndjson.org/ – Koterpillar

+0

@ Koterpillar no, это только неофициальное имя, данное чему-то, а не * JSON. Это фрагменты JSON, разделенные символами новой строки, используемые по причинам выше. Репозиторий Github, на который вы ссылались, был создан долго * после того, как * люди начали использовать новые строки. Единственные упомянутые библиотеки являются собственными, никогда не обновляемыми.Это не сайт формата, это неудачный PR-трюк –

+0

@ Koterpillar, а законная «спецификация» по сути бесполезна. Это просто ссылки на фактический стандарт. Все, что он говорит, это «использовать новую строку как разделитель». Это не то, что используется. Новые строки должны использоваться * не *, кроме отдельных записей. –

Смежные вопросы