Подтвердить что ты не робот

Функции PHP json_encode и javascript

Мне нужно закодировать функцию javascript в объекте JSON в PHP.

Это:

$function = "function(){}";
$message = "Hello";

$json = array(   
      'message' => $message,
      'func' => $function
);
echo json_encode($json);

выходы:

{"message":"Hello","func":"function(){}"}

Я хочу:

{"message":"Hello","func":function(){}}

Могу ли я сделать это с помощью json_encode?

4b9b3361

Ответ 2

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

Ответ 3

Если вы не хотите писать свой собственный JSON-кодер, вы можете прибегнуть к Zend_Json, кодер JSON для Zend Framework. Он включает в себя возможность справиться с выражениями JSON.

Ответ 4

json_decode анализирует данный массив на строку json, поэтому вы можете играть с ним как строку. Просто используйте уникальную строку, чтобы указать начало и конец функции. Затем используйте str_replace для удаления кавычек.

$function = "#!!function(){}!!#"; 
$message = "Hello";

$json = array(   
  'message' => $message,
  'func' => $function
);
$string = json_encode($json);
$string = str_replace('"#!!','',$string);
$string = str_replace('!!#"','',$string);
echo $string;

Выход будет:

{"message":"Hello","func":function(){}}

Ответ 5

Я пишу эту простую функцию для всех функций, основанных на json-функции, my mybe помогает кому-то:

function json_encode_ex($array) {
    $var = json_encode($array);
    preg_match_all('/\"function.*?\"/', $var, $matches);
    foreach ($matches[0] as $key => $value) {
        $newval = str_replace(array('\n', '\t','\/'), array(PHP_EOL,"\t",'/'), trim($value, '"'));
        $var = str_replace($value, $newval, $var);
    }
    return $var;
}

Ответ 6

Вы можете попробовать следующее:

var json_string = '{"message":"Hello","myfunc":"function(){ alert(this.message) }"}';
var json_string = JSON.parse(json_string, function(k,v){
    if(typeof v == 'string' && /function\(\)\{/.test(v)){
        return eval(k+' = '+v); 
    }else{
        return v
    }
});

Ответ 7

Подходящая часть в PHP, похоже, уже решена. Вы можете использовать

json_encode($p, JSON_UNESCAPED_UNICODE)

таким образом ваша функция не будет экранирована. Однако