2009-09-16 15 views

Respuesta

10

La forma más sencilla sería probablemente a comenzar con una matriz asociativa de los pares que desee:

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

continuación, utilizar un foreach y algunos concatenación de cadenas :

$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 .= "]"; 

O si tiene una versión reciente de PHP, puede usar la función de codificación json ons integrados: solo tenga cuidado con los datos que los pasa para que coincidan con el formato esperado.

+0

Esto funcionó como un encanto, gracias. Aunque, si entiendo correctamente, debería haber usado "json_encode" ¿hubiera sido mejor la codificación? – Haluk

+2

¿Por qué no simplemente usar json_encode? –

+0

@TimWachter Esta respuesta es de 2009; observe el bit al final sobre "si tiene una versión reciente"; un buen número de hosts todavía ejecutaban solo PHP 4 (y 'json_encode' se introdujo en 5.2). – Amber

60

Una vez que tenga sus datos PHP, puede utilizar la función json_encode; se incluye con PHP a partir de PHP 5.2

En el caso de que cadena JSON representa:

  • una lista que contiene 2 elementos
  • ser un objeto de cada uno, que contiene 2 Propiedades/Valores

En PHP, esto crearía la estructura que está representando:

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

El var_dump se obtiene:

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) 

Y, codificarlo en JSON:

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

Se obtiene:

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


Por cierto: Frolm lo que recuerdo, yo diría su cadena JSON no es válida: datos JSON: debe haber comillas dobles alrededor de la cadena, incluidos los nombres de las propiedades de los objetos

Ver http://www.json.org/ para la gramática.


Esperanza esto ayuda :-)

+2

En realidad no necesita emitir matrices en objetos. json_encode automágicamente imagina que debería representar cosas como un objeto si tiene claves de cadena. –

+1

Hola, La salida que obtuve del código anterior es realmente diferente: matriz (2) {[0] => objeto (stdClass) # 1 (2) {[oV "] => cadena (12) "myfirstvalue" ["oT"] => cadena (11) "myfirsttext"} [1] => object (stdClass) # 2 (2) {["oV"] => cadena (13) "mysecondvalue" ["oT "] => cadena (12)" mysecondtext "}} [{" oV ":" myfirstvalue "," oT ":" myfirsttext "}, {" oV ":" mysecondvalue "," oT ":" mysecondtext "}] – Haluk

+1

Quité el var_dump del código anterior y modifiqué la parte principal de la siguiente manera. Ahora funciona bien: $ datos = array ( array ( oV => 'myfirstvalue', oT => 'myfirsttext', ), array ( oV => 'mysecondvalue', oT => 'mysecondtext', ), ); – Haluk

2

Este es el código php para generar formato 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'); 
?>