Я пытаюсь получить запрос JSON, который имеет внутренние объекты без ключа. Но я получаю неожиданный токен {в позиции 1

Пример JSON приведен ниже.

{{"empid": "001", "академический тип": "Бакалавр", "академическая степень": "ВЕ", "академическая специализация": "Компьютерные науки"}, {"empid": "002", "академический тип": " Магистерские программы »,« академическая степень »:« MBA »,« академическая специализация »:« человеческие ресурсы »}}

Я пробовал с приведенным ниже кодом

createEmployeeAcademics(req, res, next) {

        let body = '';
        var fbResponse = [];
        req.on('data', function (chunk) {
            console.log(chunk);
            body += chunk;
            console.log(body);
        });

        req.on('end', function () {
            fbResponse.length = 0;

            var arrayValues = JSON.parse(body);

            for (var i = 0; i < arrayValues.length; i++) {

                fbResponse.push(arrayValues[i]);
            }
        });
    }

Я получаю ошибку ниже

SyntaxError: неожиданный токен {в JSON в позиции 1 в JSON.parse ()

-1
Solomon Raja 2 Май 2019 в 12:19

4 ответа

Лучший ответ

Это недопустимый объект или список Javascript, который уже проанализирован. попробуйте сделать список, затем цикл только

Подобно

[ { "empid" : "001", "academictype": "Bachelor", "academicdegree": "BE", "academicSpecialization": "Computer Science" }, { "empid": "002", "academictype": "Masters", "academicdegree": "MBA", "academicSpecialization": "Human Resources" } ] 
3
user11431018user11431018 2 Май 2019 в 09:25

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

Возможно, вам придется исправить сервер для отправки данных в формате пары ключ-значение.

Это можно сделать двумя способами.

1) Поместите массив сотрудников в объект-оболочку:

{"employees": [{ "empid" : "001", "academictype": "Bachelor", "academicdegree": "BE", "academicSpecialization": "Computer Science" }, { "empid": "002", "academictype": "Masters", "academicdegree": "MBA", "academicSpecialization": "Human Resources" }]}

2) Поместите сотрудников в соответствие с идентификаторами сотрудников:

{ "001":{ "empid" : "001", "academictype": "Bachelor", "academicdegree": "BE", "academicSpecialization": "Computer Science" }, "002":{ "empid": "002", "academictype": "Masters", "academicdegree": "MBA", "academicSpecialization": "Human Resources" } }

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

1
Teddy 2 Май 2019 в 09:33

Вы получаете ошибку Unexpected token, потому что JSON.parse(body) не может проанализировать предоставленный вами JSON. Предварительная настройка JSON с помощью онлайновых инструментов может помочь отладить эту проблему лучше. Для вашей строки:

{
    {
        "empid": "001",
        "academictype": "Bachelor",
        "academicdegree": "BE",
        "academicSpecialization": "Computer Science"
    }, {
        "empid": "002",
        "academictype": "Masters",
        "academicdegree": "MBA",
        "academicSpecialization": "Human Resources"
    }
}

В вашем JSON отсутствует важное свойство, связанное с objects.

Объекты JSON окружены фигурными скобками {}.

Объекты JSON записываются в парах ключ / значение.

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

< Сильный > 1 . Создание внешнего JSON-массива

[
    {
        "empid": "001",
        ...
    }, {
        "empid": "002",
        ...
    }
]

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

< Сильный > 2 . Добавьте ключи к дочерним объектам внешнего объекта:

{
    "001": {
        "academictype": "Bachelor",
        "academicdegree": "BE",
        "academicSpecialization": "Computer Science"
    },
    "002": {
        "academictype": "Masters",
        "academicdegree": "MBA",
        "academicSpecialization": "Human Resources"
    }
}

Таким образом, вы можете получить доступ к объектам напрямую, используя их уникальные идентификаторы (например, empid), хотя итерация по ним может быть не такой простой, как массив.

2
Mayur Dhurpate 2 Май 2019 в 09:37

Ваш образец JSON недействителен. Вы можете использовать json lint для проверки вашего объекта json.

1
Sreehari 2 Май 2019 в 09:21