2016-01-30 15 views
11

Muszę przekonwertować tablicę PHP na json, ale nie dostaję tego, czego się spodziewam. Chcę, aby obiekt był łatwym w nawigacji dzięki indeksowi numerycznemu. Oto przykładowy kod:PHP Array to Json Object

$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; 

To co mam

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

Ale chcę uzyskać obiekt zamiast tablicy:

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

Dziękuję :)

+2

* Dlaczego * chcesz, aby zewnętrzna tablica stała się obiektem JSON? Jeśli ma tylko klucze numeryczne, tablica dostarcza tych samych informacji w nieco mniejszej przestrzeni i łatwiej jest pracować z elementami JS (można na przykład użyć opcji 'Array :: forEach' i' Array :: map'). – 00dani

+0

@ 00Davo Dzięki, ponieważ pomyślałem, że łatwiej jest go obsłużyć, gdy jest obiektem hhh, używam go głównie tylko na serwerze (PHP) :) P.S. Upvoted –

Odpowiedz

18

Chcesz json_encode($json, JSON_FORCE_OBJECT).

Flaga JSON_FORCE_OBJECT, jak sama nazwa wskazuje, wymusza wyjście json jako obiekt, nawet jeśli w przeciwnym razie normalnie byłby reprezentowany jako tablica.

Można również wyeliminować stosowanie array_push dla niektórych nieco czystsze kodu:

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

Dzięki, ale to jest to, co mam: { "0": { "0": "ip => 192.168.0.1", "1": "port => 2016" } } –

+1

Twoje struny nie całkiem na właściwym miejscu w twoim 'array_push'. Wypróbuj 'array_push ($ json, [" ip "=> $ ip," port "=> $ port]);' – jbafford

4

wystarczy użyć tylko

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

Dziękuję, nie testowałem tego, ale @jbafford było szybsze :), przegłosowano btw –

3

Aby uzyskać tablicę obiektów można tworzyć stdClass() zamiast tablicy dla wewnętrzne przedmioty, takie jak poniżej;

<?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; 

?> 

przykład roboczych 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

W celu uzyskania obiektu, a nie tylko spróbować json ciąg:

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

Jeśli chcesz jsonise zagnieżdżonych tablic jak zrobić dobrze :

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