Проблема с анализом JSON в NodeJs

У меня есть файл .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.

Возможный дубликат Как с помощью Node.JS прочитать объект JSON в (серверной) памяти?

Heretic Monkey 08.04.2018 19:43

Также Как разобрать JSON с помощью Node.js?

Heretic Monkey 08.04.2018 19:44

Я пробовал все эти методы, но по неизвестной причине все еще получаю строку типа.

Peter Stoyanov 08.04.2018 19:45

Я бы порекомендовал создавать console.info () после каждого оператора и видеть его формат, чтобы было легче понять, где и что идет не так. также назначьте fs.readFileSync переменной, а затем повторно используйте ее. его более читаемый ИМО.

AmirHossein Rd 08.04.2018 19:47

если я использую эту строку кода var data = JSON.parse (fs.readFileSync ('data / users.json', 'utf8')); я получаю undefined: 1 {

Peter Stoyanov 08.04.2018 19:47

Мне нужно любой ценой использовать JSON stringify, потому что синтаксический анализ JSON не принимает json, но когда я его использую, я не получаю объект из синтаксического анализа JSON

Peter Stoyanov 08.04.2018 19:49

Просто используйте require('./data/users.json').

user9315861 08.04.2018 20:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
7
369
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Хорошо, поэтому 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

Peter Stoyanov 08.04.2018 20:06

просто чтобы убедиться, что у вас есть папка с именем data, а внутри есть users.json, верно?

AmirHossein Rd 08.04.2018 20:35

он остается с той же проблемой @AmirHosseinRd

Peter Stoyanov 08.04.2018 21:43
Ответ принят как подходящий

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

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

{
   "key": "value"
}

Когда вы читаете файл (используя readFileSync) и применяете JSON.stringify, он преобразуется в новую строку, как показано ниже. Вы можете заметить, что двойные кавычки теперь экранированы

"{\"key\": \"value\"}"

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

Вы в основном сначала выполняете, а затем отменяете операцию stringify

Я получаю это сейчас, но когда я использую другой способ, я получаю эту ошибку: undefined: 1 '{' SyntaxError: неожиданный токен в JSON в позиции 0

Peter Stoyanov 08.04.2018 20:09

Вы можете распечатать строку, полученную от readFileSync , используя console.info, и проверить, правильно ли она?

S4beR 08.04.2018 20:16

Да все выглядит нормально. Но не могу избавиться от этой ошибки.

Peter Stoyanov 08.04.2018 20:18

Когда я печатаю строку в консоли, я не получаю кавычки на концах, это то, о чем мне следует беспокоиться @ S4beR?

Peter Stoyanov 08.04.2018 20:24

я полагаю, вы видите что-то вроде {"key": "value"}? Это представление в порядке

S4beR 08.04.2018 20:26

Тогда хорошо. Тем не менее я не могу понять, как решить эту проблему.

Peter Stoyanov 08.04.2018 20:29

Это работает для меня:

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 плохо построен.

Peter Stoyanov 08.04.2018 20:13

Другие вопросы по теме