2010-11-02 32 views
9

Tôi đã có một câu hỏi về việc một 2D JSON stringPHP JSON decode - stdClass

Bây giờ tôi muốn biết tại sao tôi không thể truy cập như sau:

$json_str = '{"urls":["http://example.com/001.jpg","http://example.com/003.jpg","http://example.com/002.jpg"],"alts":["testing int chars àèéìòóù stop","second description",""],"favs":["true", "false", "false"]}'; 

$j_string_decoded = json_decode($json_str); 
// echo print_r($j_string_decoded); // OK 

// test get url from second item 
echo j_string_decoded['urls'][1]; 
// Fatal error: Cannot use object of type stdClass as array 

Trả lời

22

Bạn đang truy cập nó với cú pháp mảng như:

echo j_string_decoded['urls'][1]; 

Trong khi đối tượng được trả về.

Chuyển nó sang mảng bằng cách xác định số thứ hai để true:

$j_string_decoded = json_decode($json_str, true); 

Làm cho nó:

$json_str = '{"urls":["http://site.com/001.jpg","http://site.com/003.jpg","http://site.com/002.jpg"],"alts":["testing int chars àèéìòóù stop","second description",""],"favs":["true", "false", "false"]}'; 

$j_string_decoded = json_decode($json_str, true); 
echo j_string_decoded['urls'][1]; 

Hoặc Hãy thử điều này:

$j_string_decoded->urls[1] 

Thông báo các nhà điều hành -> sử dụng cho các đối tượng .

Trích dẫn từ Documents:

Trả về giá trị mã hóa trong json theo loại PHP thích hợp. Giá trị đúng, false và null (không phân biệt chữ hoa chữ thường) là được trả lại là TRUE, FALSE và NULL tương ứng. NULL được trả về nếu không thể giải mã số anbom hoặc nếu dữ liệu được mã hóa sâu hơn giới hạn đệ quy .

http://php.net/manual/en/function.json-decode.php

+0

câu trả lời tuyệt vời, chúc mừng Sarfraz – FFish

+0

@FFish: Welcome :) – Sarfraz

5

Sử dụng:

json_decode($jsonstring, true); 

để trả về mảng.

+0

Đã lưu tôi! : vvvvvv –

7

json_decode theo mặc định biến từ điển JSON thành đối tượng PHP, do đó bạn sẽ truy cập giá trị của bạn như $j_string_decoded->urls[1]

Hoặc bạn có thể vượt qua một đối số bổ sung như json_decode($json_str,true) để có nó trở lại mảng kết hợp, trong đó sau đó sẽ tương thích với $j_string_decoded['urls'][1]

+0

thanx cho lời giải thích! – FFish

Các vấn đề liên quan