Як отримати доступ до імені / значення об'єкта JSON?


75
function (data) {
    //add values based on activity type
    //data = JSON.parse(data);
    //alert(abc.Phone1);

    alert(data.myName)

    alert(data.toString());
    if (activityType == "Phone") {
    }
    return;

},

Як ви можете бачити, ця функція зворотного виклику $.ajaxприймає JSONдані з контролера.

Наприклад:

[{"name":"myName" ,"address": "myAddress" }]

У цьому випадку моє перше сповіщення, яке видає мені невизначене, і друге / третє спливаюче спливаюче вікно придумує:

[{"name":"myName" ,"address": "myAddress" }]

Як я можу отримати доступ до значення за іменем, щоб моє перше попередження, заповнене myNameяким було значенням name?

Відповіді:


111

Замість аналізу JSON ви можете зробити наступне:

$.ajax({
  ..
  dataType: 'json' // using json, jquery will make parse for  you
});

Щоб отримати доступ до властивості вашого JSON, виконайте такі дії:

data[0].name;

data[0].address;

Навіщо вам потрібно, data[0]оскільки дані - це масив, тому для отримання їх вмісту вам потрібен data[0](перший елемент), який дає вам об’єкт {"name":"myName" ,"address": "myAddress" }.

А доступ до властивості правила об’єкта:

Object.property

або іноді

Object["property"] // in some case

Тож вам потрібно

data[0].name і так далі, щоб отримати бажане.


Якщо ні

встановити, dataType: jsonтоді вам потрібно проаналізувати їх за допомогою $.parseJSON()та отримати дані, як зазначено вище.


maps.googleapis.com/maps/api/geocode/… з цієї URL-адреси, як отримати значення поля "formatted_address" у змінній? успіх: функція (дані) {address = data ['formatted_address'];} видає помилку
user3816325

чи існує більш оптимізований спосіб це зробити? якщо у мене є список json із понад 20 імен, і мені потрібно відобразити їх значення, але я не знаю, чи буде повернуто якесь із них у json, це може бути одне або 3 або 10 або всі 20 з їм, чи слід повторювати те ж саме для кожного з них, наприклад:if data[0].name : console.log(data[0].name); if data[0].adress : console.log(data[0].adress); ..
Armance

може data[0].[0]працювати, отримати доступ name? Дивлячись на це як на масив.
Малкольм Сальвадор

29

JSON, який ви отримуєте, знаходиться у рядку. Ви повинні перетворити його в об'єкт JSON. Ви прокоментували найважливіший рядок коду

data = JSON.parse(data);

Або якщо ви використовуєте jQuery

data = $.parseJSON(data)

навіть при коментуванні лінії я отримую невизначений
RollerCosta

Це тому, що ваш JSON - це масив. Спробуйте data [0] .name замість data.name. І переконайтесь, що ви отримуєте доступ до властивості, яка не має значення, тобто даних [0] .name (властивість), замість того, що ви робите у своєму запитанні data.myName (що є значенням)
UP

15

Якщо ваша відповідь схожа {'customer':{'first_name':'John','last_name':'Cena'}}

var d = JSON.parse(response);
alert(d.customer.first_name); // contains "John"

Дякую,


Привіт, якби я хотів витягти "клієнта", як би я зробив це там, де клієнт - це саме те, що я хочу. У моєму випадку я хочу витягти aboutme.jpg, що нижче у вигляді рядка b '{"_ id": "2", "_ rev": "5-760e627e77645e960c5cc40ea6cf03a2", "_ attachments": {"aboutme.jpg": {"content_type ":" image / jpeg "," revpos ": 3," digest ":" md5-mG5uU4IRGuY / f9PbZ8AIbQ == "," length ": 98831," stub ": true}}} \ n '
Ендрю Ірвін

6

Ви повинні це зробити

alert(data[0].name); //Take the property name of the first array

і ні

 alert(data.myName)

jQuery повинен мати можливість нюхати dataType для вас, навіть якщо ви не встановите його, тому немає необхідності в JSON.parse.

скрипатися тут

http://jsfiddle.net/H2yN6/


4

Спробуйте цей код ..

function (data) {


var json = jQuery.parseJSON(data);
alert( json.name );


}

я спробував це раніше і отримав помилку помилки виконання Microsoft JScript: Об'єкт не підтримує властивість або метод 'parseJSON'
RollerCosta


2

Можливо, ви захочете спробувати такий підхід:

var  str ="{ "name" : "user"}";
var jsonData = JSON.parse(str);     
console.log(jsonData.name)
//Array Object
str ="[{ "name" : "user"},{ "name" : "user2"}]";
jsonData = JSON.parse(str);     
console.log(jsonData[0].name)

0

Ось вам дружня порада. Використовуйте щось на зразок Chrome Developer Tools або Firebug для Firefox, щоб перевірити ваші дзвінки та результати Ajax.

Можливо, ви також захочете витратити трохи часу на розуміння допоміжної бібліотеки, як Underscore , яка доповнює jQuery і надає вам понад 60 корисних функцій для маніпулювання об'єктами даних за допомогою JavaScript.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.