Я анализирую несколько данных, используя класс типа в моем контроллере. Я получаю следующие данные:
{
"data":{
"userList":[
{
"id":1,
"name":"soni"
}
]
},
"status":200,
"config":{
"method":"POST",
"transformRequest":[
null
],
"transformResponse":[
null
],
"url":"/home/main/module/userlist",
"headers":{
"rt":"ajax",
"Tenant":"Id:null",
"Access-Handler":"Authorization:null",
"Accept":"application/json, text/plain, */*"
}
},
"statusText":"OK"
}
Я пытался хранить данные вот так
var userData = _data;
var newData = JSON.parse(userData).data.userList;
Как мне извлечь список пользователей в новую переменную?
javascript
angularjs
json
Сония Мохан
источник
источник
JSON.parse
. Попробуйте использоватьuserData
прямо как объект.console.log(typeof userData)
отображается,object
значит, у вас уже есть объект javascript, а не строка JSON, которую необходимо проанализировать.Unexpected token o in JSON
, скорее всего, вы пытаетесь проанализировать объект, который уже находится в проанализированной форме.Ответы:
Опубликованный вами JSON выглядит нормально, однако в вашем коде он, скорее всего, больше не является строкой JSON, а уже является объектом JavaScript. Это означает, что синтаксический анализ больше не требуется.
Вы можете проверить это сами, например, в консоли Chrome:
JSON.parse()
преобразует ввод в строку.toString()
Метод JavaScript объектов по умолчанию возвращает[object Object]
, в результате наблюдаемого поведения.Вместо этого попробуйте следующее:
источник
первые параметры функции
JSON.parse
должны быть строкой, а ваши данные - объектом JavaScript, поэтому они будут преобразованы в строку[object object]
, которую следует использоватьJSON.stringify
перед передачей данныхисточник
Никогда не используйте
JSON.parse
без упаковки вtry-catch
блок:источник
Чуть выше
JSON.parse
используйте:источник
JSON.stringify()
преобразует объект JavaScript в его строковое представление, что противоположно тому, чтоJSON.parse()
делает. Вы получили,SyntaxError
потому что пытались разобрать что-то, что уже было объектом. В решении @Sukhchain он преобразуется в строку, чтобы этого избежать.JSON.parse()
слишком много избыточно. Несмотря на то, что это довольно быстрый процесс, синтаксический анализ JSON выполняется синхронно и потенциально может заблокировать ваш пользовательский интерфейс, поэтому я бы не советовал использовать это. Вместо этого вы можете проверить, является ли ваша переменная объектом, например, используя,typeof(userData) === 'object'
прежде чем пытаться ее проанализировать.Ну, я имел в виду , что мне нужно , чтобы разобрать объект , как это:
var jsonObj = {"first name" : "fname"}
. Но на самом деле я этого не делаю. Потому что это уже JSON.источник
Мы также можем добавить такие проверки:
источник
Неожиданная ошибка «O» выдается при анализе данных JSON или String.
Если это строка, она уже привязана. Разбор заканчивается неожиданной ошибкой "O".
Я столкнулся с подобным (хотя и в другом контексте), я решил следующую ошибку, удалив JSON Producer.
Ответ содержит возврат строки «ОК» . Аннотация, помеченная как @Produces ({** MediaType.APPLICATION_JSON }) **, пытается преобразовать строку в формат JSON, что приводит к неожиданному 'O' .
Удаление @Produces ({ MediaType.APPLICATION_JSON }) работает нормально. Выход: ОК
Остерегайтесь: Кроме того, на стороне клиента, если вы сделаете запрос ajax и используете JSON.parse ("OK"), он выбрасывает неожиданный токен 'O'
O - первая буква строки
JSON.parse (объект) сравнивается с jQuery.parseJSON (объект);
JSON.parse ('{"имя": "Ергалем", "город": "Довер"}'); --- Работает отлично
источник