Add Additional Objects to JSON Encoded Array

31,922

Solution 1

Just keep pushing to the $data array.

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

Then at the very end, do your json_encode. Assuming you're not referring to merging it in the JS itself with multiple ajax calls.

And if you have separate scripts, combine them in one php page.

Solution 2

Try in this way:-

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

Solution 3

You could edit the JSON (text), but it's much easier to modify the array before you encode it. Or am I missing something?

Share:
31,922
Dodinas
Author by

Dodinas

Updated on July 19, 2022

Comments

  • Dodinas
    Dodinas almost 2 years

    I am currently using a JSON encoded array to display the users in my database for an auto-suggest feature.

    It looks something like this:

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

    This returns:

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

    My question is somewhat 2-fold:

    First, how would I manually add an additional object to this output? For example, let's say I wanted to add: {"id":"444","name":"A New Name"}

    Thus, it'd look like:

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

    Second, let's say I also wanted to add more objects to the array from a separate table as well, such as:

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

    This way I could have both tables populated in the JSON array, thus, showing up as additional options in my autosuggest.

    Hopefully this makes sense, as I've tried hard to articulate what I am trying to accomplish.

    Thanks!

  • Dodinas
    Dodinas almost 14 years
    Thanks Meder. Easier than I thought it'd be.