Регистрация как JSON - Стандарт - это несколько корневых элементов, почему?
Я ищу, чтобы написать файл журнала в формате JSON.
Посмотрев несколько библиотек для форматирования вдохновения и лучших практик (Winston для Node.JS, опция ведения журнала JSON в Apache и т. Д.), Я заметил, что почти все они пишут несколько корневых элементов по сравнению с использованием Array или Root Element.
Пример:
{"time": "2012-09-20T20: 27: 59Z", "level": "info", "message": "Hello World"} {"time": "2012-09-20T21: 37: 59Z", "level": "info", "message": "Hello Again"}
против
[{"time":"2012-09-20T20:27:59Z","level":"info","message":"Hello World"},{"time":"2012-09-20T21:37:59Z","level":"info","message":" Снова привет "}]
Почему это делается, если технически недопустимо наличие в JSON нескольких корневых элементов?
2 ответа
При ведении журнала вы продолжаете добавлять новые записи журнала. Как бы вы узнали, когда закрывать массив? Когда ваша регистрация завершена? Вы можете начать журнал с пустого массива, []
, но затем при добавлении записи вам нужно будет продолжить поиск в файле, чтобы найти правильное место, и проверить, нужна ли запятая или нет.
Или вы просто записываете каждую запись как отдельный корневой объект, и каждый раз, когда вы записываете что-то, оно является независимым и добавляется в конец файла. Это намного проще.
Журнал не является отдельным объектом JSON, т. Е. Весь журнал не формирует допустимую строку JSON. Это последовательность независимых объектов JSON. Отдельные записи - это единицы, которые вы должны учитывать, а не весь журнал в целом.
Потому что журнал увеличивается с каждой секундой.
Без корневого элемента новый журнал может просто дополняться старыми элементами. Если есть корневой элемент или массив, вам нужно запросить новые элементы журнала и добавить его.
Итак, у вас есть правильный выбор.