проблема в этой строке
$data = json_decode($json, true);
здесь $ json это массив и jsondecode
ожидаемая строка.
здесь код, который будет работать.
(!isset($_SESSION))? session_start() : null;
if($json = json_decode(file_get_contents("php://input"), true)) {
//this seection will execute if you post data.
$_SESSION["json"] = $json;
} else {
//this will execute if you do not post data
var_dump($_SESSION["json"]);
}