Добавить дополнительные объекты в JSON Encoded Array - PullRequest
8 голосов
/ 17 августа 2010

В настоящее время я использую массив в кодировке JSON для отображения пользователей в моей базе данных для функции автоматического предложения.

Это выглядит примерно так:

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

Возвращает:

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

Мой вопрос несколько двукратный:

Сначала , как мне вручную добавить дополнительный объект к этому выводу? Например, скажем, я хотел добавить: {"id":"444","name":"A New Name"}

Таким образом, это будет выглядеть так:

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

Второй , допустим, я также хотел добавить больше объектов в массив из отдельной таблицы, например:

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

Таким образом, я мог бы заполнить обе таблицы в массиве JSON, таким образом, появившись в качестве дополнительных параметров в моем автозаполнении.

Надеюсь, это имеет смысл, так как я изо всех сил пытался сформулировать, что я пытаюсь достичь.

Спасибо!

Ответы [ 4 ]

13 голосов
/ 17 августа 2010

Просто продолжайте нажимать на массив $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;

Тогда в самом конце сделайте свой json_encode. Предполагая, что вы не имеете в виду слияние его в самом JS с несколькими вызовами ajax.

А если у вас есть отдельные скрипты, объедините их на одной странице php.

4 голосов
/ 14 января 2015

Попробуйте следующим образом: -

$temp = json_encode($json);  //$json={"var1":"value1","var2":"value2"}   
$temp=substr($temp,0,-1);
$temp.=',"variable":"'.$value.'"}';
1 голос
/ 17 августа 2010

Вы можете редактировать JSON (текст), но гораздо проще изменить массив перед его кодированием.Или я что-то упустил?

0 голосов
/ 17 августа 2010

Я не эксперт в какой-либо из этих областей, но я постараюсь выяснить, смогу ли я помочь. Попробуйте один из них:

Вариант 1 (я не знаю, как союзы работают в 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);

Я никогда не делал PHP, поэтому я делаю предположения. Я также никогда не использовал MySql, так что есть больше предположений.

Вариант 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);

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...