Làm cách nào để truy cập tên / giá trị đối tượng 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;

},

Như bạn có thể thấy chức năng gọi lại này $.ajaxđể lấy JSONdữ liệu từ bộ điều khiển.

Ví dụ:

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

Trong trường hợp này, cảnh báo đầu tiên của tôi cung cấp cho tôi cửa sổ bật lên cảnh báo không xác định và cảnh báo thứ hai / thứ ba xuất hiện với:

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

Làm cách nào tôi có thể truy cập giá trị theo tên để cảnh báo đầu tiên của tôi được điền vào có myNamegiá trị là name?

Câu trả lời:


111

Thay vì phân tích cú pháp JSON, bạn có thể làm như sau:

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

Để truy cập thuộc tính JSON của bạn, hãy làm như sau:

data[0].name;

data[0].address;

Tại sao bạn cần data[0]vì dữ liệu là một mảng, vì vậy để truy xuất nội dung của nó, bạn cần data[0](phần tử đầu tiên), nó cung cấp cho bạn một đối tượng {"name":"myName" ,"address": "myAddress" }.

Và để truy cập thuộc tính của một quy tắc đối tượng là:

Object.property

Hoặc đôi khi

Object["property"] // in some case

Vì vậy bạn cần

data[0].name và như vậy để đạt được những gì bạn muốn.


Nếu bạn không

thiết lập dataType: jsonthì bạn cần phải phân tích cú pháp chúng bằng cách sử dụng $.parseJSON()và truy xuất dữ liệu như trên.


maps.googleapis.com/maps/api/geocode/… từ url này, làm cách nào để lấy giá trị trường "formatted_address" trong một biến? thành công: function (data) {địa chỉ = dữ liệu [ 'formatted_address'];} ném một lỗi
user3816325

có cách nào được tối ưu hóa hơn để làm như vậy không? nếu tôi có danh sách json gồm hơn 20 tên và tôi cần hiển thị giá trị của chúng, nhưng tôi không biết liệu cái nào trong số chúng sẽ được trả lại trong json, nó có thể là một hoặc 3 hoặc 10 hoặc tất cả 20 chúng, tôi có nên lặp lại giống nhau cho từng cái hay không, ví dụ:if data[0].name : console.log(data[0].name); if data[0].adress : console.log(data[0].adress); ..
Armance,

có thể data[0].[0]hoạt động, để truy cập name? Nhìn nó giống như một mảng.
Malcolm Salvador

29

JSON bạn đang nhận ở dạng chuỗi. Bạn phải chuyển đổi nó thành đối tượng JSON Bạn đã nhận xét dòng mã quan trọng nhất

data = JSON.parse(data);

Hoặc nếu bạn đang sử dụng jQuery

data = $.parseJSON(data)

ngay cả trên uncommenting dòng i nhận được undefined
RollerCosta

Đó là vì JSON của bạn là một mảng. Hãy thử data [0] .name thay vì data.name. Và chắc chắn rằng bạn sở hữu truy cập không đánh giá cao nghĩa là dữ liệu [0] .name (tài sản) thay vì những gì bạn đang làm trong câu hỏi của bạn data.myName (đó là giá trị)
UP

15

Nếu bạn phản hồi như thế {'customer':{'first_name':'John','last_name':'Cena'}}

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

Cảm ơn,


Xin chào, Nếu tôi muốn trích xuất 'khách hàng', tôi sẽ làm như thế nào khi khách hàng là thứ thực sự tôi muốn. Trong trường hợp của tôi, tôi muốn trích xuất aboutme.jpg dưới đây dưới dạng chuỗi b '{"_ id": "2", "_ rev": "5-760e627e77645e960c5cc40ea6cf03a2", "_ tệp đính kèm": {"aboutme.jpg": {"content_type ":" image / jpeg "," revpos ": 3," thông báo ":" md5-mG5uU4IRGuY / f9PbZ8AIbQ == "," length ": 98831," sơ khai ": true}}} \ n '
Andrew Irwin

6

Bạn nên làm

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

và không

 alert(data.myName)

jQuery sẽ có thể tìm thấy dataType cho bạn ngay cả khi bạn không đặt nó nên không cần JSON.parse.

sờ soạng ở đây

http://jsfiddle.net/H2yN6/


4

Hãy thử mã này ..

function (data) {


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


}

tôi đã cố gắng nó trước và nhận được một lỗi Microsoft JScript runtime lỗi: Object không hỗ trợ tài sản hoặc phương pháp 'parseJSON'
RollerCosta


2

Bạn có thể muốn thử cách tiếp cận này:

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

Đây là một lời khuyên thân thiện. Sử dụng một cái gì đó như Công cụ nhà phát triển Chrome hoặc Firebug dành cho Firefox để kiểm tra kết quả và cuộc gọi Ajax của bạn.

Bạn cũng có thể muốn đầu tư một chút thời gian để tìm hiểu thư viện trợ giúp như Underscore , thư viện này bổ sung cho jQuery và cung cấp cho bạn hơn 60 hàm hữu ích để thao tác các đối tượng dữ liệu với JavaScript.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.