2009-03-25 4 views
105

Tôi có một tập lệnh PHP đang được gọi thông qua jQuery AJAX. Tôi muốn tập lệnh PHP trả về dữ liệu ở định dạng JSON cho javascript. Đây là mã giả trong tập lệnh PHP:Trả lại JSON từ PHP sang JavaScript?

$json = "{"; 
foreach($result as $addr) 
{ 
    foreach($addr as $line) 
    { 
     $json .= $line . "\n"; 
    } 
    $json .= "\n\n"; 
} 
$json .= "}"; 

Về cơ bản, tôi cần kết quả của hai vòng để chèn vào $ json.

Trả lời

170

Php có chức năng Nối tiếp JSON sẵn có.

json_encode 

json_encode

Hãy sử dụng rằng nếu bạn có thể và không bị Không phát minh Dưới đây hội chứng.

+2

Tuyệt vời, cảm ơn bạn. Tôi đã thực sự xem xét điều này trước khi đăng trên SO, nhưng tôi không nghĩ rằng nó sẽ có sẵn trên lưu trữ của tôi. – AquinasTub

79

JSON section trong tài liệu của PHP. Bạn sẽ cần PHP 5.2.0.

Kể từ PHP 5.2.0, phần mở rộng JSON được đóng gói và biên dịch sang PHP theo mặc định.

Nếu không, đây là PECL library bạn có thể cài đặt.

<?php 
    $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); 

    echo json_encode($arr); // {"a":1,"b":2,"c":3,"d":4,"e":5} 
?> 
+1

Ví dụ hay. Cảm ơn bạn. –

13

Thông thường, bạn sẽ quan tâm đến cũng có một số cấu trúc dữ liệu của bạn vào cuối nhận:

json_encode($result) 

này sẽ bảo vệ các phím mảng là tốt.

Hãy nhớ rằng json_encode chỉ hoạt động trên dữ liệu được mã hóa utf8.

0

Bạn có thể sử dụng Simple JSON for PHP. Nó gửi các tiêu đề giúp bạn giả mạo JSON.

Dường như:

<?php 
// Include the json class 
include('includes/json.php'); 

// Then create the PHP-Json Object to suits your needs 

// Set a variable ; var name = {} 
$Json = new json('var', 'name'); 
// Fire a callback ; callback({}); 
$Json = new json('callback', 'name'); 
// Just send a raw JSON ; {} 
$Json = new json(); 

// Build data 
$object = new stdClass(); 
$object->test = 'OK'; 
$arraytest = array('1','2','3'); 
$jsonOnly = '{"Hello" : "darling"}'; 

// Add some content 
$Json->add('width', '565px'); 
$Json->add('You are logged IN'); 
$Json->add('An_Object', $object); 
$Json->add("An_Array",$arraytest); 
$Json->add("A_Json",$jsonOnly); 

// Finally, send the JSON. 

$Json->send(); 
?> 
+1

$ object = new stdClass(); đã giúp tôi! thanks;) – ivahidmontazer

+0

Cảnh báo: JSON đơn giản cho PHP được cấp phép GPLv2, vì vậy mã của riêng bạn phải là mã nguồn mở để sử dụng nó. –

87

Dưới đây là một vài điều còn thiếu trong các câu trả lời trước:

  1. Đặt tiêu đề trong chương trình PHP:

    header('Content-type: application/json'); 
    echo json_encode($array); 
    
  2. json_encode() thể trả lại JavaScript mảng thay vì JavaScript đối tượng, hãy xem:
    Returning JSON from a PHP Script
    Điều này có thể quan trọng cần biết trong một số trường hợp vì mảng và đối tượng không giống nhau.

+0

Điều quan trọng cần lưu ý là dữ liệu là ** echo ** ed thay vì ** return ** ed!Điều đó bit cho tôi một thời gian tốt khi lần đầu tiên học khái niệm. Bởi vì trong lập trình chung, hầu hết mọi thứ thường được trả về không "in". –

+0

Hey @Juha, hãy nhớ rằng 'json_encode()' (giống như tất cả các hàm) luôn trả về một cái gì đó (bao gồm 'NULL'); bạn có thể in dữ liệu, xử lý nó và sau đó in nó, đưa nó vào một biến để sử dụng sau này, lưu nó vào một tệp, v.v. Bạn có thể đọc thêm về 'return' trong [PHP: Giá trị trả lại] (http : //php.net/manual/en/functions.returning-values.php). Ngoài ra, bạn có thể (và nên!) Kiểm tra xem mỗi chức năng bạn không biết trả về, xem ví dụ của chúng tôi [json_encode()] (http://php.net/manual/en/function.json-encode.php) nó tuyên bố _Returns một chuỗi được mã hóa JSON thành công hoặc FALSE trên thất bại._ – aesede

+0

Quay lại sau đó, tôi đã tự hỏi tại sao 'return json_encode ($ jsonArray);' không hoạt động (AngularJS http.get không nhận được bất cứ điều gì), cho đến khi tôi sau đó nhận thấy nó :) –