Как правильно отправить json через POST с помощью CURL?
Если вы шлёте на сервер application/json, то в $_POST у вас ничего не окажется -- он будет пустым. Что бы прочитать такой POST-запрос вам понадобится что-то вроде этого: $json = file_get_contents('php://input');
$obj = json_decode($json);
Подозреваю, что тут есть ответ на ваш вопрос: 
stackoverflow.com/questions/19004783/reading-json-...
PS: О том что такое php://input и как с ним можно работать и когда говорится вот тут: php.net/manual/ru/wrappers.php.php
Пример ты взял (приблизительно) отсюда www.lornajane.net/posts/2011/posting-json-data-wit... и очевидно, что у автора статьи всё работает
Если тебе приходит пустота, то скорее всего на сервере фатальная ошибка.
Проверяй error.log веб-сервера.