2009-09-16 7 views

Odpowiedz

10

Najprostszym sposobem będzie prawdopodobnie na początek tablicy asocjacyjnej par chcesz:

$data = array("myfirstvalue" => "myfirsttext", "mysecondvalue" => "mysecondtext"); 

następnie użyć foreach i niektóre konkatenacji smyczkową :

$jsontext = "["; 
foreach($data as $key => $value) { 
    $jsontext .= "{oV: '".addslashes($key)."', oT: '".addslashes($value)."'},"; 
} 
$jsontext = substr_replace($jsontext, '', -1); // to get rid of extra comma 
$jsontext .= "]"; 

Lub jeśli masz najnowszą wersję PHP, możesz użyć funkcji kodowania json wbudowane moduły - po prostu uważaj, jakie dane przekazujesz, aby pasowały do ​​oczekiwanego formatu.

+0

To działało jak wdzięk dziękuję. Chociaż jeśli dobrze rozumiem, powinienem był użyć "json_encode", byłoby lepszym kodowaniem? – Haluk

+2

Dlaczego nie po prostu użyć json_encode? –

+0

@TimWachter Ta odpowiedź pochodzi z 2009 roku; zwróć uwagę na końcówkę o "jeśli masz najnowszą wersję"; spora liczba hostów nadal działała tylko w PHP 4 (i wprowadzono "json_encode" w wersji 5.2). – Amber

60

Po uzyskaniu danych PHP, można użyć funkcji json_encode; to w pakiecie z PHP od PHP 5.2

W twoim przypadku JSON ciąg reprezentuje:

  • lista zawierająca 2 elementy
  • których każdy jest obiekt zawierający 2 właściwości/wartości

W PHP stworzy to strukturę, którą reprezentujesz:

$data = array(
    (object)array(
     'oV' => 'myfirstvalue', 
     'oT' => 'myfirsttext', 
    ), 
    (object)array(
     'oV' => 'mysecondvalue', 
     'oT' => 'mysecondtext', 
    ), 
); 
var_dump($data); 

var_dump dostaje:

array 
    0 => 
    object(stdClass)[1] 
     public 'oV' => string 'myfirstvalue' (length=12) 
     public 'oT' => string 'myfirsttext' (length=11) 
    1 => 
    object(stdClass)[2] 
     public 'oV' => string 'mysecondvalue' (length=13) 
     public 'oT' => string 'mysecondtext' (length=12) 

I kodującego go do JSON:

$json = json_encode($data); 
echo $json; 

Otrzymasz:

[{"oV":"myfirstvalue","oT":"myfirsttext"},{"oV":"mysecondvalue","oT":"mysecondtext"}] 


BTW: Frolm co pamiętam, powiedziałbym, Twój ciąg JSON jest niepoprawny - dane JSON: powinny istnieć podwójne cudzysłowy w całym ciągu, w tym nazwy właściwości obiektów

Zobacz gramaturę w artykule http://www.json.org/.


Nadzieja to pomaga :-)

+2

rzeczywistości nie trzeba rzucać tablice na obiekty. json_encode automagicznie uzna, że ​​powinien reprezentować rzeczy jako obiekt, jeśli masz klucze łańcuchowe. –

+1

Witam, Dane wyjściowe otrzymane z powyższego kodu są faktycznie różne: tablica (2) {[0] => obiekt (stdClass) # 1 (2) {["oV"] => ciąg (12) "myfirstvalue" ["oT"] => string (11) "myfirsttext"} [1] => object (stdClass) # 2 (2) {["oV"] => string (13) "mysecondvalue" ["oT "] => string (12)" mysecondtext "}} [{" oV ":" myfirstvalue "," oT ":" myfirsttext "}, {" oV ":" mysecondvalue "," oT ":" mysecondtext "}] – Haluk

+1

Usunąłem var_dump z powyższego kodu i zmodyfikowałem główną część w następujący sposób. Teraz to działa prawidłowo: $ data = array ( array ( OV => 'myfirstvalue', OT => 'myfirsttext', ), array ( OV => 'mysecondvalue', oT => "mysecondtext", ), ); – Haluk

2

Jest to kod php do generowania formacie JSON

<?php 

    $catId = $_GET['catId']; 
    $catId = $_POST['catId']; 

    $conn = mysqli_connect("localhost","root","","DBName"); 
    if(!$conn) 
    { 
     trigger_error('Could not Connect' .mysqli_connect_error()); 
    } 

    $sql = "SELECT * FROM TableName"; 
    $result = mysqli_query($conn, $sql); 

    $array = array(); 

    while($row=mysqli_fetch_assoc($result)) 
    { 
     $array[] = $row; 
    } 

    echo'{"ProductsData":'.json_encode($array).'}'; //Here ProductsData is just a simple String u can write anything instead 
    mysqli_close('$conn'); 
?>