Получить значение из объекта json с помощью javascript

Я пытаюсь получить конкретное значение из объекта json, который возвращается из запроса. Но синтаксис, который я использую, не работает. Возвращаемое значение - undefined. Как я могу получить значение ключа name в объекте json?

Ответ сохраняется в переменной клиента.

$http.get('url').
   then(function successCallback(response){
        var costumers = response;
        console.info(costumers['data']['costumers']['name']);
    }, function errorCallback(response){

});

Объект Json

{data: "{"costumers":[{"id":"1","name":"John"},{"id":"2","name":"Mary"}]}"}
costumers['data']['costumers'][0]['name']
ArtemSky 01.06.2018 15:38

Приведенный выше комментарий верен, или вы можете отказаться от всех ненужных кавычек и просто использовать costumers.data.costumers[0].name. (Боевой призыв прокомментировать "объект json")

Reinstate Monica Cellio 01.06.2018 15:40

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

Jared Smith 01.06.2018 15:40
Поведение ключевого слова "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) для оценки ваших знаний,...
4
3
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

costumers в вашем случае представляет собой массив объектов, поэтому вы должны указать индекс объекта, на который вы хотите настроить таргетинг для получения значений, например:

costumers['data']['costumers'][0]['name']
______________________________^^^

Индекс 0 вернет первый объект:

{"id":"1","name":"John"}

Вы всегда можете перебрать все объекты costumers, и вы можете проверить, имеет ли возвращаемый объект нужный вам «атрибут»:

if ( costumers['data']['costumers'][0].hasOwnProperty('name') ){
    console.info( costumers['data']['costumers'][0]['name'] );
}
Ответ принят как подходящий

customers - это массив, для доступа к элементам массива вам нужно записать индекс в квадратных скобках позади него. В этом случае, если вы хотите получить доступ к первому элементу (индекс 0) массива, вы можете сделать это следующим образом:

$http.get('url').
then(function successCallback(response){
    var costumers = response;
    console.info(costumers['data']['costumers'][0]['name']);
}, function errorCallback(response){

});

Или зарегистрируйте всех клиентов с помощью цикла for:

$http.get('url').
then(function successCallback(response){
    var costumers = response;
    for(let customer of costumers['data']['costumers']) {
        console.info(customer['name']);
    }
}, function errorCallback(response){

});

Все это работает, только если объект синтаксически правильный, он должен выглядеть так:

{data: {costumers:[{id:"1",name:"John"},{id:"2",name:"Mary"}]}}

Вместо размещенного вами объекта.

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