Забыл сказать. Я же говорил - прочесть о функции
json_decode. Что пишут? А пишут о том, о чем я ранее говорил - если опущен второй параметр функции, то результатом будет не массив, а объект. К пример, пусть json будет таким и он как и у вас отправлен серверу под ключом q:
{"a":1,"b":2}
Декодируем:
$data = json_decode($_POST['q']);
//попытка вывести значение как
echo $data['a'];
//закончится фатальной ошибкой - Fatal error: Cannot use object of type stdClass as array
//так как $data, это объект и получить можно только значения его свойств a и b
echo $data->a; //а так верно и будет выведено в браузер 1, получили значение свойства a объекта $data
//если декодировать со вторым параметром равным true (можно и 1 указать, любое значение больше 0 тоже есть true)
$data = json_decode($_POST['q'], true);
//то $data массив и вывод
echo $data['a']; //это верно, есть такой ключ в массиве, а значит получим 1
Обязательно читать о функциях, их назначении, параметрах и работе. В руководстве есть примеры.