У меня есть файл .json, в котором хранятся имена людей. Я читаю содержимое этого файла, используя файловую систему из Node Manager, а затем пытаюсь преобразовать этот json в строку и разобрать ее на объект JS. После разбора его на объект JS я получаю строку типа вместо объекта. Вот пример файла json:
{
"21154535154122752": {
"username": "Stanislav",
"discriminator": "0001",
"id": "21154535154122752",
"avatar": "043bc3d9f7c2655ea2e3bf029b19fa5f",
"shared_servers": [
"Reactiflux",
"Discord Testers",
"Official Fortnite",
"Discord API"
]
}
}
а вот код для обработки данных:
const string_data = JSON.stringify(fs.readFileSync('data/users.json', 'utf8'));
const data = JSON.parse(string_data);
console.info(typeof(data)); // <-- this line here shows the type of data as string
const results_array = Object.values(data);
где fs - это пакет файловой системы из npm.
Также Как разобрать JSON с помощью Node.js?
Я пробовал все эти методы, но по неизвестной причине все еще получаю строку типа.
Я бы порекомендовал создавать console.info () после каждого оператора и видеть его формат, чтобы было легче понять, где и что идет не так. также назначьте fs.readFileSync переменной, а затем повторно используйте ее. его более читаемый ИМО.
если я использую эту строку кода var data = JSON.parse (fs.readFileSync ('data / users.json', 'utf8')); я получаю undefined: 1 {
Мне нужно любой ценой использовать JSON stringify, потому что синтаксический анализ JSON не принимает json, но когда я его использую, я не получаю объект из синтаксического анализа JSON
Просто используйте require('./data/users.json').



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Хорошо, поэтому fs.readFileSync возвращает строку, поэтому вам не нужно использовать stringify
var fs = require('fs');
var read = fs.readFileSync('data/users.json', 'utf8');
console.info(read);
console.info(typeof(read));
const data = JSON.parse(read);
console.info(typeof(data));
Вы увидите, что он возвращает объект
Не знаю, но получаю ошибку undefined: 1 '{' SyntaxError: неожиданный токен в JSON в позиции 0
просто чтобы убедиться, что у вас есть папка с именем data, а внутри есть users.json, верно?
он остается с той же проблемой @AmirHosseinRd
не используйте JSON.stringify, поскольку он дополнительно изменяет строковое представление объекта JSON. Пример происходящего ниже
Представьте, что в вашем файле есть данные, как показано ниже.
{
"key": "value"
}
Когда вы читаете файл (используя readFileSync) и применяете JSON.stringify, он преобразуется в новую строку, как показано ниже. Вы можете заметить, что двойные кавычки теперь экранированы
"{\"key\": \"value\"}"
Теперь, когда вы проанализируете его с помощью JSON.parse, вместо получения желаемого object вы вернете ту же строку, которую прочитали из файла.
Вы в основном сначала выполняете, а затем отменяете операцию stringify
Я получаю это сейчас, но когда я использую другой способ, я получаю эту ошибку: undefined: 1 '{' SyntaxError: неожиданный токен в JSON в позиции 0
Вы можете распечатать строку, полученную от readFileSync , используя console.info, и проверить, правильно ли она?
Да все выглядит нормально. Но не могу избавиться от этой ошибки.
Когда я печатаю строку в консоли, я не получаю кавычки на концах, это то, о чем мне следует беспокоиться @ S4beR?
я полагаю, вы видите что-то вроде {"key": "value"}? Это представление в порядке
Тогда хорошо. Тем не менее я не могу понять, как решить эту проблему.
Это работает для меня:
const data = JSON.parse(fs.readFileSync('data/users.json', 'utf8'));
console.info(typeof(data)); // <-- this line here shows the type of data as OBJECT
const results_array = Object.values(data);
Я действительно не знаю, что я делаю не так, может быть, это из-за того, что json плохо построен.
Возможный дубликат Как с помощью Node.JS прочитать объект JSON в (серверной) памяти?