2010-08-17 16 views
8

Actualmente estoy usando una matriz codificada JSON para mostrar a los usuarios en mi base de datos una característica de sugerir automáticamente.Agregar objetos adicionales a la matriz con codificación JSON

se ve algo como esto:

$sth = mysql_query("SELECT id, name FROM users"); 

$json = array(); 

    while($row = mysql_fetch_assoc($sth)) { 
     $json['name'] = $row['name']; 
     $json['id'] = $row['id']; 
     $data[] = $json; 
    } 

print json_encode($data); 

Esto devuelve:

[{"id":"81","name":"John Doe"},{"id":"82","name":"Jane Doe"}] 

Mi pregunta es algo 2 veces:

Primera, ¿cómo iba a añadir manualmente un adicional objetar a esta salida? Por ejemplo, digamos que quería añadir: {"id":"444","name":"A New Name"}

De este modo, se vería como:

[{"id":"81","name":"John Doe"},{"id":"82","name":"Jane Doe"},{"id":"444","name":"A New Name"}] 

Segunda, digamos que también quería añadir más objetos a la matriz de una tabla separada así, por ejemplo:

$sth = mysql_query("SELECT id, title FROM another_table"); 

$json = array(); 

    while($row = mysql_fetch_assoc($sth)) { 
     $json['name'] = $row['title']; 
     $json['id'] = $row['id']; 
     $data[] = $json; 
    } 

print json_encode($data); 

Esta manera de que pudiera tener ambas tablas pobladas en la matriz JSON, por lo tanto, aparecer como opciones adicionales en mi auto sugerencia.

Afortunadamente, esto tiene sentido, ya que he tratado de articular lo que estoy tratando de lograr.

Gracias!

+1

Y ¿por qué no añadirlos a la matriz antes de hacer la json_encode? Eso tendría más sentido para mí. – wimvds

Respuesta

13

Simplemente siga presionando a la matriz $data.

$json = array(); 

    while($row = mysql_fetch_assoc($sth)) { 
     $json['name'] = $row['name']; 
     $json['id'] = $row['id']; 
     $data[] = $json; 
    } 

$custom = array('name'=>'foo', 'id' => 'bar'); 
$data[] = $custom; 

Luego, al final, haga su json_encode. Asumiendo que no se está refiriendo a fusionarlo en el JS mismo con múltiples llamadas ajax.

Y si tiene scripts separados, combínelos en una página php.

+1

Gracias Meder. Más fácil de lo que pensé que sería. – Dodinas

1

Puede editar el JSON (texto), pero es mucho más fácil modificar el conjunto antes de codificarlo. ¿O me estoy perdiendo algo?

0

No soy un experto en ninguno de estos campos, pero intentaré ver si puedo ayudar. Pruebe uno de estos:

Opción 1 (No sé cómo los sindicatos trabajan en MySQL):

$sth = mysql_query("SELECT id, name FROM users union SELECT id, name FROM (SELECT id, title as name from another_table) as T2"); 


    $json = array(); 

     while($row = mysql_fetch_assoc($sth)) { 
      $json['name'] = $row['name']; 
      $json['id'] = $row['id']; 
     } 

    $json['name'] = 'A new name'; 
    $json['id'] = '444'; 
    $data[] = $json; 

    print json_encode($data); 

que nunca he hecho en PHP, por lo que estoy haciendo suposiciones. Tampoco he usado MySql, así que hay más suposiciones.

Opción 2:

$sth = mysql_query("SELECT id, name FROM users"); 


    $json = array(); 

     while($row = mysql_fetch_assoc($sth)) { 
      $json['name'] = $row['name']; 
      $json['id'] = $row['id']; 
     } 

$sth = mysql_query("SELECT id, title from another_table"); 


     while($row = mysql_fetch_assoc($sth)) { 
      $json['name'] = $row['title']; 
      $json['id'] = $row['id']; 
     } 

    $json['name'] = 'A new name'; 
    $json['id'] = '444'; 
    $data[] = $json; 

    print json_encode($data); 

Espero que esto ayude.

4

Trate de esta manera: -

$temp = json_encode($json); //$json={"var1":"value1","var2":"value2"} 
$temp=substr($temp,0,-1); 
$temp.=',"variable":"'.$value.'"}'; 
Cuestiones relacionadas