Js прочитал файл json

Обновлено: 04.07.2024

Если вы хотите хранить данные между перезапусками сервера с помощью Node, файлы JSON — это простой и удобный выбор. Независимо от того, читаете ли вы файл конфигурации или сохраняете данные для своего приложения, в Node есть несколько встроенных утилит, упрощающих чтение и запись файлов JSON. Использование файлов JSON в вашем приложении может быть полезным способом сохранения данных. Мы рассмотрим несколько различных методов работы с файлами JSON.

В этом уроке мы:

  • Чтение данных JSON с диска
  • Научитесь использовать модуль fs для взаимодействия с файловой системой
  • Сохранение данных в файле JSON
  • Используйте JSON.parse и JSON.stringify для преобразования данных в формат JSON и из него.

К концу этого руководства вы сможете работать с файлами JSON с помощью встроенного в Node модуля fs.

Допустим, у вас есть файл customer.json, сохраненный на диске, который содержит запись о покупателе в вашем магазине.

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

В этом руководстве мы рассмотрим, как читать и записывать в наш файл customer.json.

Предпосылки

Наблюдение: чтение/запись файлов JSON

Взаимодействовать с файлами с помощью fs

Доступ к файлам в Node осуществляется с помощью встроенного модуля fs, который дает вам функции для просмотра, чтения и записи файлов, а также многие другие инструменты для работы с файловой системой. Поскольку это нативный модуль, мы можем потребовать его в нашем коде, не устанавливая его. Просто вызовите const fs = require(‘fs’) .

Модуль fs дает нам возможность синхронной или асинхронной версии многих своих функций. Синхронные версии блокируют выполнение другого кода до тех пор, пока они не закончат доступ к файловой системе, чтение или запись данных. Асинхронная функция будет работать без блокировки другого кода. Узнайте больше о поведении синхронизации/асинхронности.

Такое синхронное поведение может быть полезным в некоторых случаях, например при запуске при чтении файла конфигурации перед запуском любого другого кода, но становится серьезной проблемой при использовании на веб-сервере, где все входящие запросы будут заблокированы во время синхронного чтения файла. это работает. По этой причине вы обычно хотите использовать в своем коде асинхронные версии функций fs. Мы сосредоточимся на асинхронных операциях, но также покажем их синхронный эквивалент.

Для асинхронного чтения и записи файлов с помощью fs мы будем использовать fs.readFile и fs.writeFile .

Мы также будем использовать глобальный помощник JSON для преобразования объектов в строки JSON и строк JSON в объекты.

Чтение файла JSON

Самый простой способ прочитать файл JSON — потребовать его. Передача require() с путем к файлу JSON приведет к синхронному чтению и анализу данных в объект JavaScript.

Но чтение файлов JSON с помощью require имеет свои недостатки. Файл будет прочитан только один раз; требуя, чтобы он снова возвращал кэшированные данные из первого запуска запроса. Это нормально для загрузки статических данных при запуске (например, данных конфигурации). Но для чтения файла, который изменяется на диске, как наш customer.json, нам нужно вручную прочитать файл с помощью асинхронного fs.readFile .

Чтение файла с помощью fs.readFile

Чтобы получить доступ к адресу клиента, нам необходимо:

  • Чтение данных JSON из файла
  • Синтаксический анализ строки JSON в объект JavaScript

Чтобы загрузить данные из файла customer.json, мы будем использовать fs.readFile , передав ему путь к нашему файлу, необязательный тип кодировки и обратный вызов для получения данных файла. Если файл успешно прочитан, содержимое будет передано обратному вызову.

  • ./customer.json — относительный путь к файлу. utf8 — необязательный параметр для кодировки читаемого файла, его можно не указывать.
  • (err, jsonString) =><> – это функция обратного вызова, которая запускается после прочтения файла.

Теперь у нас есть содержимое файла в виде строки JSON, но нам нужно преобразовать строку в объект.

Прежде чем мы сможем использовать данные обратного вызова в нашем коде, мы должны превратить их в объект. JSON.parse принимает данные JSON в качестве входных данных и возвращает новый объект JavaScript. В противном случае у нас была бы просто строка данных со свойствами, к которым у нас нет доступа.

JSON.parse может вызвать ошибки исключения и привести к сбою нашей программы, если будет передана недопустимая строка JSON. Чтобы предотвратить сбой, мы заключаем JSON.parse в инструкцию try catch, чтобы изящно перехватывать любые ошибки.

В этом примере показано чтение и анализ файла JSON:

Используя jsonString из чтения customer.json, мы создаем объект и можем получить доступ к свойству адреса. Если JSON.parse выдает ошибку, мы обрабатываем ее в блоке catch.

Теперь у нас есть объектное представление данных в нашем файле customer.json!

Мы также можем читать файл синхронно, используя fs.readFileSync .Вместо обратного вызова readFileSync возвращает содержимое файла после его чтения.

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

Запись в файл с помощью fs.writeFile

Запись JSON в файловую систему аналогична ее чтению. Мы будем использовать fs.writeFile для асинхронной записи данных в файл newCustomer.json.

Во-первых, чтобы записать данные в файл JSON, мы должны создать строку данных JSON с помощью JSON.stringify . Это возвращает строковое представление JSON объекта JavaScript, которое можно записать в файл. Подобно анализу данных в объект при чтении файла, мы должны преобразовать наши данные в строку, чтобы иметь возможность записать их в файл.

Создайте объект клиента с нашими данными ниже и превратите его в строку.

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

После преобразования данных в строку мы можем использовать fs.writeFile для создания нового файла клиента. Мы передаем fs.writeFile путь к файлу, данные клиента для записи и обратный вызов, который будет выполнен после записи файла. Если файл newCustomer.json еще не существует, он будет создан; если он существует, он будет перезаписан!

Вот пример записи файла JSON с помощью fs.writeFile

И все! После запуска обратного вызова файл будет записан на диск. Примечание: нам передается только объект ошибки; данные файла, которые мы написали, не передаются обратному вызову. Мы также можем синхронно записать файл таким же образом, используя fs.writeFileSync :

После того, как ваш файл будет готов, он будет выглядеть примерно так:

Структура по умолчанию помещает все ваши данные в одну строку. При желании вы можете сделать выходной файл удобочитаемым для человека, передав количество пробелов для отступа в JSON.stringify :

Выше мы указали stringify отступ данных с двумя пробелами. Теперь ваш выходной файл должен выглядеть так:

Обновить файл JSON

Теперь, когда мы можем читать и записывать файлы наших клиентов, мы можем использовать их как простую базу данных. Если мы хотим обновить данные в файле JSON, мы можем прочитать содержимое, изменить данные, а затем записать новые данные обратно в файл:

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

Подведение итогов

JSON — это один из наиболее распространенных типов данных, с которыми вы будете работать в Node, и возможность чтения и записи файлов JSON очень полезна. Вы узнали, как использовать fs.readFile и fs.writeFile для асинхронной работы с файловой системой, а также как анализировать данные в формате JSON и из него, а также выявлять ошибки из JSON.parse .

Вы можете использовать требование чтения файла JSON при запуске для синхронного анализа файла JSON в одной строке. И теперь вы можете использовать простой файл JSON в качестве хранилища данных.

Если вы хотите узнать больше, вы можете прочитать, что такое JSON на самом деле, и узнать больше о синхронном и асинхронном коде.

Дальнейшее понимание

  • Рассмотрите этот пример вместе с коллегой. Все ли понятия вам понятны? Вам нужно что-то проверить?

Дополнительные ресурсы

Войдите в свою учетную запись Osio Labs
, чтобы получить мгновенный доступ ко всей нашей библиотеке.

Я сохранил файл JSON в своей локальной системе и создал файл JavaScript, чтобы прочитать файл JSON и распечатать данные. Вот файл JSON:

Допустим, это путь к файлу JSON: /Users/Documents/workspace/test.json .

Может ли кто-нибудь помочь мне написать простой фрагмент кода для чтения файла JSON и вывода данных в JavaScript?

28 ответов 28

Для чтения внешнего локального файла JSON (data.json) с помощью javascript сначала создайте файл data.json:

Укажите путь к файлу json в источнике скрипта вместе с файлом javascript

Получить объект из файла json

Для получения дополнительной информации см. этот справочник.

Примечание. JSON.parse не поддерживается в некоторых старых браузерах (на примере IE). См. таблицу совместимости браузеров MDN для window.JSON .

Это неправильный ответ. Пример в ответе не загружает файл json. На самом деле это просто загрузка другого файла javascript, в котором хранится некоторый жестко закодированный json в виде переменной с именем data . Если вы удалили строковые кавычки вокруг json в data.json, вам даже не нужно было бы использовать JSON.parse . Вопрос в том, как загрузить файл JSON, а не в том, как жестко закодировать JSON в другой файл javascript, а затем загрузить его.

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

Эта функция также работает для загрузки файлов .html или .txt путем переопределения параметра типа mime на "text/html", "text/plain" и т. д.



@mhaseeb Вы можете (даже сейчас, в будущем), если ресурс имеет тот же домен/протокол, что и запрашивающая система (а это будет, поскольку он локальный). Найдите CORS.

при попытке сделать это с текущей версией Chrome я получаю сообщение "Запросы между источниками поддерживаются только для схем протоколов: http, data, chrome, chrome-extension, https". - значит нет файлового протокола, который здесь подразумевается @GreySage

Вы также можете установить rawFile.responseType = 'json'; чтобы он автоматически анализировал объект json, просто не забудьте передать в обратный вызов rawFile.response вместо rawFile.responseText.

Обходной путь – запустить локальный веб-сервер, передать файл и сделать AJAX-вызов локальному хосту.

Чтобы помочь вам написать код для чтения JSON, вам следует прочитать документацию для jQuery.getJSON() :


Не могли бы вы объяснить мне, как в этом случае запустить локальный сервер? Что мне нужно сделать, чтобы запустить локальный сервер?

Это верно только для AJAX: в Chrome и с использованием File API HTML5 я уже сделал это. Вопрос не касался AJAX.

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


Использование Fetch API — самое простое решение:

Он отлично работает в Firefox, но в Chrome вам нужно настроить параметры безопасности.

Когда я попробовал это, я получил следующую ошибку: (узел: 2065) UnhandledPromiseRejectionWarning: Ошибка: поддерживаются только абсолютные URL-адреса

  1. Сначала создайте файл json. В этом примере мой файл Words.json
  1. А вот мой код, например, node.js. Обратите внимание на аргумент utf8 для readFileSync : он возвращает не буфер (хотя JSON.parse может его обработать), а строку. Я создаю сервер, чтобы увидеть результат.
  1. Если вы хотите прочитать конкретную информацию об идентификаторе, вы можете упомянуть код как..
  1. Когда вы введете URL-адрес как localhost:3030/get/33, он предоставит подробную информацию, связанную с этим идентификатором. и вы читаете по имени также. Мой файл json имеет похожие имена с этим кодом, вы можете получить информацию об одном имени. и он не напечатал все похожие имена
  1. И если вы хотите прочитать информацию о похожих именах, вы можете использовать этот код.
  1. Если вы хотите прочитать всю информацию в файле, используйте этот код ниже.



В этом ответе показано не то, как загрузить файл с помощью Vanilla Javascript, а то, как это сделать с помощью Node.js

Вы можете импортировать его как модуль ES6;

Тогда как вы можете импортировать динамический файл json? Я думаю, что вы можете импортировать файлы json только тогда, когда вы находитесь в режиме разработки по вашему методу.


Как уже упоминалось ранее, это не работает с использованием вызова AJAX. Однако есть способ обойти это. Используя элемент ввода, вы можете выбрать свой файл.

Затем вы можете прочитать файл с помощью JS с FileReader():


В этом случае пользователь должен сам выбрать файл из-за политики CORS, которая в основном не позволяет разработчику веб-страницы захватывать данные, которые он не должен (например, я мог бы взять их личные файлы, я может сделать запрос GET к потенциально плохому сценарию и запустить его без разрешения пользователя). Политика CORS усложняет работу с такими вещами без какой-либо серверной части, но делает пользователя более безопасным. Если вы действительно хотите открыть файл, вам придется запустить веб-сервер, который сможет управлять этими запросами.

Очень просто.
Переименуйте файл json в ".js" вместо ".json".

Так что следуйте своему коду как обычно.

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

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

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

Примечание. Не пытайтесь автоматизировать загрузку файлов с помощью JavaScript, даже если это также запрещено из-за тех же ограничений безопасности, налагаемых браузерами.


Вы можете сделать это с помощью fetch() с помощью асинхронного ожидания. Это новейший и самый безопасный способ получения данных по URL-адресу.

Вы также можете использовать это для получения данных с внешнего URL.


Вы можете увидеть ответ myObj, используя оператор console.log (закомментирован).

Если файл находится в другой папке, укажите полный путь вместо имени файла.


Поскольку у вас есть веб-приложение, у вас могут быть клиент и сервер.

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

Однако, как объяснил лаухуб выше, это работает:

Чтение JSON можно переместить в другую функцию для DRY; но приведенный здесь пример больше демонстрирует использование промисов.

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

Вы можете использовать d3.js для импорта файлов JSON. Просто вызовите d3 в своем HTML-коде:

Затем добавьте это в свои js-скрипты:

Превратите файл JSON в файл .js и назначьте json переменной или константе, а затем обратитесь к нему в основном файле javascript.


Одним из простых способов является размещение файла JSON на локально работающем сервере. для этого из терминала перейдите в папку вашего проекта и запустите локальный сервер на каком-то номере порта, например, 8181

Использование jQuery и ajax отлично подходит для чтения файла JSON и управления данными


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

Просто быстрый и грязный код js

Тестировать json:

введите здесь описание изображения

Вы можете использовать D3 для обработки обратного вызова и загрузить локальный файл JSON data.json следующим образом:

Я прочитал вышеизложенное и заметил, что обычно в проектах кто-то хочет иметь более одного файла json для загрузки. В некоторых случаях gazilion, а в некоторых случаях «каталог файлов json» (из которых вам в противном случае пришлось бы сначала создать список, чтобы иметь возможность загрузить каждый из них). Это становится грязным, если это по всему проекту. И это может быть проблемой, если между данными в файлах json много взаимосвязей.

Очевидно, что все это можно сделать с помощью описанных выше методов, либо создав файлы .js, либо извлекая их с помощью какой-либо локальной выборки.

Однако альтернатива (если вам не нужно решение на стороне сервера с уровнями), которую я нашел полезной, заключается в том, чтобы сначала загрузить все ваши данные в базу данных Sql Lite. Это также немного упрощает управление большим количеством данных, и у вас есть только один файл со всеми вашими данными и т. д.

Затем вы используете веб-сборку для загрузки базы данных sqlite, а затем можете использовать обычные запросы для запроса данных на стороне клиента. Так что все это можно сделать на стороне клиента

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

В предыдущей статье я упоминал, как читать файл excel в javascript, читать pdf с помощью javascript, теперь в этой статье я упомянул, как читать файл json с помощью javascript и как анализировать json в javascript.

Предположим, что это наш пример файла JSON, который мы будем использовать в этой статье:

Чтение файла JSON в Javascript путем передачи файла с помощью ввода HTML

В этом примере мы передадим файл json, используя тип ввода = файл, а затем мы будем читать файл в javascript с помощью FileReader() , так что вот пример для этого

и функция javascript, которая будет читать файл при изменении входного файла:

В приведенном выше коде мы читаем файл с помощью FileReader , после загрузки файла в объект чтения файла мы будем использовать JSON.parse для анализа JSON

Вывод, который выглядит примерно так в браузере

< бр />

Вот рабочая скрипка

Чтение локального файла JSON в Javascript путем передачи местоположения файла

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

Чтение внешнего файла JSON в Javascript

В этом методе мы будем передавать JSON в файл из другого места с помощью Fetch API, как показано в приведенном ниже коде

В приведенном выше коде мы используем fetch API и передаем местоположение в fetch. Как только мы получили ответ, мы используем console.log для его печати, мы также можем использовать JSON.parse для анализа JSON и использования это.

Предположим, мы просто хотим получить значение "title" из приведенного выше JSON, тогда мы можем распечатать его, как показано ниже

ИЛИ Используя jQuery $.getJSON, вы можете получить код ниже

Синтаксический анализ JSON в Javascript

Хотя в приведенных выше примерах я упомянул, как мы можем анализировать JSON в javascript, вот простой пример этого

В приведенном выше коде, как вы можете видеть, мы взяли простой пример JSON и присвоили его переменной, и использовали JSON.parse для анализа с помощью переменной, а затем использовали .name или .age для получения значения.

Если вы получаете значения в виде массива или списка внутри JSON, вы можете зациклить эти значения, используя $.each.


Обозначение объектов JavaScript, сокращенно JSON, является одним из самых популярных форматов для хранения данных и обмена данными через Интернет. Простота синтаксиса JSON позволяет людям и машинам легко читать и писать.

Несмотря на свое название, использование формата данных JSON не ограничивается JavaScript. В большинстве языков программирования реализованы структуры данных, которые можно легко преобразовать в JSON и наоборот.

JavaScript и, следовательно, среда выполнения Node.js не являются исключением. Чаще всего эти данные JSON необходимо читать или записывать в файл для сохранения. Среда выполнения Node имеет встроенный модуль fs специально для работы с файлами.

Эта статья представляет собой исчерпывающее руководство по использованию встроенного модуля fs для чтения и записи данных в формате JSON. Мы также рассмотрим некоторые сторонние пакеты npm, которые упрощают работу с данными в формате JSON.

Сериализация и десериализация JSON

Сериализация – это процесс преобразования объекта или структуры данных в формат, удобный для хранения или передачи через Интернет. Вы можете восстановить сериализованные данные, применив обратный процесс.

Десериализация — это преобразование сериализованной структуры данных в исходный формат.

Вам почти всегда потребуется сериализовать объект JSON или JavaScript в строку JSON в Node. Вы можете сделать это с помощью метода JSON.stringify перед записью на устройство хранения или передачей через Интернет:

С другой стороны, после прочтения файла JSON вам потребуется десериализовать строку JSON в простой объект JavaScript с помощью метода JSON.parse, прежде чем обращаться к данным или манипулировать ими:

JSON.stringify и JSON.parse — глобально доступные методы в Node. Вам не нужно устанавливать или требовать перед использованием.

Введение в модуль fs

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

Мы сделали специальное демо для .
Нет, правда. Нажмите здесь, чтобы проверить это .

Каждая функция, предоставляемая модулем fs, имеет синхронную форму, форму обратного вызова и форму обещаний. Синхронный и обратный варианты метода доступны из синхронного и обратного API. Вариант функции на основе обещаний доступен из API на основе обещаний.

Синхронный API

Синхронные методы встроенного модуля fs блокируют цикл обработки событий и дальнейшее выполнение оставшегося кода до тех пор, пока операция не завершится успешно или не удастся. Чаще всего блокировка цикла событий — это не то, что вам нужно.

Имена всех синхронных функций заканчиваются символами синхронизации. Например, функции writeFileSync и readFileSync являются синхронными.

Вы можете получить доступ к синхронному API, запросив fs :

API обратного вызова

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

Функция обратного вызова вызывается с объектом Error в качестве первого аргумента, если возникает ошибка. Остальные аргументы функции обратного вызова зависят от метода fs.

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

API на основе обещаний

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

Вы можете получить доступ к API на основе промисов, запросив fs/promises :

Мы использовали синтаксис commonJS для доступа к модулям в приведенных выше фрагментах кода. В этой статье мы будем использовать синтаксис commonJS, потому что Node по умолчанию рассматривает код JavaScript как модуль commonJS. Вы также можете использовать модули ES6, если хотите.

Согласно документации Node, API обратного вызова встроенного модуля fs более эффективен, чем API на основе обещаний. Поэтому в большинстве примеров в этой статье будет использоваться API обратного вызова.

Как читать файлы JSON в Node.js

Среда выполнения Node имеет встроенную функцию require и модуль fs, который можно использовать для загрузки или чтения файлов JSON. Поскольку функция require доступна во всем мире, вам не нужно ее запрашивать.

Однако вам потребуется модуль fs перед его использованием. В следующих подразделах я расскажу, как читать файлы JSON с помощью встроенного модуля fs и функции require.

Как загрузить файл JSON с помощью функции глобального запроса

Вы можете использовать глобальную функцию require для синхронной загрузки файлов JSON в Node. После загрузки файла с помощью require он кэшируется. Следовательно, повторная загрузка файла с помощью require загрузит кешированную версию. В серверной среде файл будет снова загружен при следующем перезапуске сервера.

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

Предполагается, что у вас есть файл config.json со следующим содержимым:

Вы можете загрузить файл config.json в файл JavaScript, используя приведенный ниже код. require всегда будет загружать данные JSON как объект JavaScript:

Как прочитать файл JSON с помощью метода fs.readFile

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

Первый аргумент path – это имя файла или дескриптор файла. Второй — необязательный аргумент объекта, а третий — функция обратного вызова. Вы также можете передать строку в качестве второго аргумента вместо объекта. Если вы передаете строку, она должна быть закодирована.

Функция обратного вызова принимает два аргумента. Первый аргумент — это объект ошибки, если возникает ошибка, а второй — сериализованные данные JSON.

Приведенный ниже фрагмент кода считывает данные JSON из файла config.json и регистрирует их на терминале:

Обязательно десериализуйте строку JSON, переданную функции обратного вызова, прежде чем начинать работу с результирующим объектом JavaScript.

Как прочитать файл JSON с помощью метода fs.readFileSync

readFileSync — это еще один встроенный метод чтения файлов в Node, аналогичный readFile . Разница между ними заключается в том, что readFile читает файл асинхронно, а readFileSync читает файл синхронно. Поэтому readFileSync блокирует цикл обработки событий и выполнение оставшегося кода до тех пор, пока не будут прочитаны все данные.

Чтобы понять разницу между синхронным и асинхронным кодом, вы можете прочитать статью "Понимание асинхронного JavaScript" здесь.

Ниже приведена сигнатура функции fs.readFileSync :

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

В приведенном ниже фрагменте кода мы считываем данные JSON из файла config.json с помощью readFileSync :

Как писать в файлы JSON в Node.js

Как и при чтении файлов JSON, модуль fs предоставляет встроенные методы для записи в файлы JSON.

Вы можете использовать методы writeFile и writeFileSync модуля fs. Разница между ними заключается в том, что writeFile является асинхронным, а writeFileSync — синхронным. Перед записью файла JSON обязательно сериализуйте объект JavaScript в строку JSON с помощью метода JSON.stringify.

Как писать в файлы JSON с помощью метода fs.writeFile

JSON.stringify отформатирует ваши данные JSON в одну строку, если вы не передадите необязательный аргумент форматирования методу JSON.stringify, указывающему, как форматировать ваши данные JSON.

Если путь, который вы передаете методу writeFile, относится к существующему файлу JSON, метод перезапишет данные в указанном файле. Он создаст новый файл, если файл не существует:

Как писать в файлы JSON с помощью метода fs.writeFileSync

В отличие от writeFile, writeFileSync записывает в файл синхронно.Если вы используете writeFileSync , вы заблокируете выполнение цикла обработки событий и остального кода до тех пор, пока операция не завершится успешно или не произойдет ошибка. Он создаст новый файл, если указанный вами путь не существует, и перезапишет его, если существует.

В приведенном ниже фрагменте кода мы записываем данные в файл config.json. Мы заключаем код в try-catch, чтобы мы могли отлавливать любые ошибки:

Как добавить файл JSON

В Node нет встроенной функции для добавления или обновления полей существующего файла JSON из коробки. Однако вы можете прочитать файл JSON с помощью метода readFile модуля fs, обновить его и перезаписать файл JSON обновленным JSON.

Ниже приведен фрагмент кода, иллюстрирующий, как это сделать:

Как читать и записывать файлы JSON с помощью сторонних пакетов npm

В этом разделе мы рассмотрим самые популярные сторонние пакеты Node для чтения и записи данных в формате JSON.

Как использовать пакет jsonfile npm для чтения и записи файлов JSON

jsonfile — это популярный пакет npm для чтения и записи файлов JSON в Node. Вы можете установить его с помощью следующей команды:

Он похож на методы readFile и writeFile модуля fs, хотя у jsonfile есть некоторые преимущества перед встроенными методами.

Некоторые функции этого пакета следующие:

  • Он сериализует и десериализует JSON сразу после установки
  • Он имеет встроенную утилиту для добавления данных в файл JSON.
  • Поддерживает цепочку обещаний

Вы можете увидеть пакет jsonfile в действии во фрагменте кода ниже:

Вы также можете использовать цепочку промисов вместо передачи функции обратного вызова, как в приведенном выше примере:

Как использовать пакет fs-extra npm для чтения и записи файлов JSON

fs-extra — еще один популярный пакет Node, который можно использовать для работы с файлами. Хотя вы можете использовать этот пакет для управления файлами JSON, в нем есть методы, функции которых выходят за рамки простого чтения и записи файлов JSON.

Как следует из названия, fs-extra обладает всеми функциями модуля fs и даже больше. Согласно документации вместо модуля fs можно использовать пакет fs-extra.

Перед использованием вам необходимо сначала установить fs-extra из npm:

В приведенном ниже коде показано, как можно читать файлы JSON с помощью метода readJson пакета fs-extra. Вы можете использовать функцию обратного вызова, цепочку промисов или async/await :

В приведенном ниже коде показано, как вы можете записывать данные JSON с помощью метода writeJson:

Как и модуль fs, fs-extra имеет как асинхронные, так и синхронные методы. Вам не нужно приводить объект JavaScript в строку перед записью в файл JSON.

Аналогично вам не нужно анализировать объект JavaScript после чтения файла JSON. Модуль делает это за вас из коробки.

Как использовать пакет bfj npm для чтения и записи файлов JSON

bfj — это еще один пакет npm, который можно использовать для обработки данных в формате JSON. Согласно документации, он был создан для управления большими наборами данных JSON.

bfj реализует асинхронные функции и использует предварительно выделенные массивы фиксированной длины, чтобы попытаться решить проблемы, связанные с синтаксическим анализом и преобразованием в строки больших наборов данных JSON или JavaScript – документация bfj

Вы можете прочитать данные JSON, используя метод чтения. Метод чтения является асинхронным и возвращает обещание.

Если у вас есть файл config.json, вы можете использовать следующий код для его чтения:

Аналогичным образом вы можете использовать метод записи для записи данных в файл JSON:

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

Заключение

Как объяснялось в предыдущих разделах, JSON — один из самых популярных форматов для обмена данными через Интернет.

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

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

В дополнение к встроенному модулю fs существует несколько популярных сторонних пакетов, таких как jsonfile , fs-extra и bfj. У них есть дополнительные служебные функции, которые упрощают работу с файлами JSON. С другой стороны, вам следует оценить ограничения, связанные с добавлением сторонних пакетов в ваше приложение.

Только 200
Отслеживание сбоев и медленных сетевых запросов в рабочей среде

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

LogRocket позволяет вашему приложению записывать базовые показатели производительности, такие как время загрузки страницы, время до первого байта, медленные сетевые запросы, а также регистрировать действия/состояние Redux, NgRx и Vuex. Начать мониторинг бесплатно.

Читайте также: