2016-01-30 35 views
11

Tôi cần chuyển đổi một mảng PHP thành json nhưng tôi không nhận được những gì tôi mong đợi. Tôi muốn nó là một đối tượng mà tôi có thể điều hướng dễ dàng với chỉ mục số. Dưới đây là một ví dụ mã:Mảng PHP vào đối tượng Json

$json = array(); 
$ip = "192.168.0.1"; 
$port = "2016"; 
array_push($json, ["ip" => $ip, "port" => $port]); 
$json = json_encode($json, JSON_PRETTY_PRINT); 
// ----- json_decode($json)["ip"] should be "192.168.0.1" ---- 
echo $json; 

Đây là những gì tôi nhận được

[ 
    [ 
     "ip" => "192.168.0.1", 
     "port" => "2016" 
    ] 
] 

Nhưng tôi muốn để có được một đối tượng thay vì mảng:

{ 
    "0": { 
     "ip": "192.168.0.1", 
     "port": "2016" 
    } 
} 

Cảm ơn bạn :)

+2

* Tại sao * bạn có muốn mảng ngoài trở thành đối tượng JSON không? Nếu nó chỉ có các khóa số, một mảng cung cấp cùng một thông tin trong không gian hơi ít hơn và dễ dàng hơn để làm việc với phía JS của mọi thứ (bạn có thể sử dụng 'Array :: forEach' và' Array :: map' chẳng hạn). – 00dani

+0

@ 00Davo Cảm ơn, bởi vì tôi nghĩ rằng nó dễ dàng hơn để xử lý nó khi nó là một đối tượng hhh, và tôi sử dụng nó chủ yếu ở phía máy chủ (PHP) chỉ :) P.S. Upvoted –

Trả lời

18

Bạn muốn json_encode($json, JSON_FORCE_OBJECT).

Cờ JSON_FORCE_OBJECT, như tên ngụ ý, buộc đầu ra json là một đối tượng, ngay cả khi nó thường được biểu diễn dưới dạng mảng.

Bạn cũng có thể loại bỏ việc sử dụng các array_push cho một số mã hơi bụi:

$json[] = ['ip' => $ip, 'port' => $port]; 
+0

Cảm ơn, nhưng đây là những gì tôi nhận được: { "0": { "0": "ip => 192.168.0.1", "1": "port => 2016" }} –

+1

dây của bạn là không hoàn toàn đúng nơi trong 'mảng_push' của bạn. Hãy thử 'array_push ($ json, [" ip "=> $ ip," cổng "=> $ port]);' – jbafford

4

chỉ cần sử dụng chỉ

$response=array(); 
$response["0"]=array("ip"  => "192.168.0.1", 
        "port" => "2016"); 
$json=json_encode($response,JSON_FORCE_OBJECT); 
+1

Cảm ơn bạn, chưa thử nghiệm nhưng @jbafford nhanh hơn :), upvoted btw –

3

Để có được mảng với các đối tượng bạn có thể tạo stdClass() thay vì mảng cho các mục bên trong như dưới đây;

<?PHP 

    $json = array(); 
    $itemObject = new stdClass(); 
    $itemObject->ip = "192.168.0.1"; 
    $itemObject->port = 2016; 

    array_push($json, $itemObject); 
    $json = json_encode($json, JSON_PRETTY_PRINT); 
    echo $json; 

?> 

Một ví dụ làm việc http://ideone.com/1QUOm6

-1
$ip = "192.168.0.1"; 
$port = "2016"; 
$json = array("response" => array("ip" => $ip, "port" => $port)); 
//IF U NEED AS JSON OBJECT 
$json = [array("ip" => $ip, "port" => $port)]; //IF U NEED AS JSON ARRAY 
$json = json_encode($json); 
echo $json; 
0

Để có được một đối tượng và không chỉ là một chuỗi json thử:

$json = json_decode(json_encode($yourArray)); 

Nếu bạn muốn jsonise các mảng lồng nhau cũng làm :

$json =json_decode(json_encode($yourArray, JSON_FORCE_OBJECT)); 
Các vấn đề liên quan