У меня в myfile.php есть следующее

$json_data = '{"type":"email","msg":"some text"}';

Вместо того, чтобы вводить «электронная почта» или «какой-то текст», я хочу объединить php-переменные $ thetype и $ themsg в предыдущую строку.

Как я могу это сделать? Независимо от того, что я делаю, я получаю синтаксическую ошибку.

Я пытаюсь:

$json_data = '{"type":"+$thetype+","msg":"+$themsg+"}';

Но, как я уже сказал, ошибок в изобилии.

Большое спасибо

1
ADM 25 Авг 2011 в 16:32

2 ответа

Лучший ответ

Ваш вопрос немного расплывчатый ...

Вы это ищете?

$json = array('type' => $thetype, 'msg' => $themsg);
$json_data = json_encode($json);

Это установит $json_data в строку, подобную описанной вами:

<?php

$thetype = 'something';
$themsg = 'something else';
$json = array('type' => $thetype, 'msg' => $themsg);
$json_data = json_encode($json);
var_dump($json_data);

Будет печатать:

string(43) "{"type":"something","msg":"something else"}"

См. руководство по PHP для json_encode.

Вы можете попробовать собрать строку вручную, например:

$json_data = '{"type":"'. addcslashes($thetype,"\"'\n").'","msg":"'. addcslashes($themsg,"\"'\n").'"}';

Но, как правило, лучше использовать json_encode, поскольку он предназначен для этой цели и с гораздо меньшей вероятностью будет создавать недопустимый JSON.

8
Josh 25 Авг 2011 в 12:59

В PHP есть функция для кодирования json. ОДНАКО вам нужно вывести его как объект для сохранения ключей. Кстати, это трехмерный массив.

$data[]=array('type' => $thetype0, 'msg' => $themsg0);
$data[]=array('type' => $thetype1, 'msg' => $themsg1);
$json=json_encode((object)$data);

РЕДАКТИРОВАТЬ: этот метод следует использовать для более старых версий PHP. Он совместим с PHP 5.3. В функцию json_encode () внесено несколько изменений, из-за которых вывод объекта недоступен в PHP 5.2.

-1
Adam F 26 Авг 2011 в 07:22