Мне нужно закодировать функцию 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?
Как сказал Яни, это невозможно напрямую с JSON, но это может помочь вам: http://web.archive.org/web/20080828165256/http://solutoire.com/2008/06/12/sending-javascript- функции-над-JSON /
Нет. Функция JSON не поддерживает функции. Вы можете написать свой собственный код для вывода его в формате JSON, и он должен работать нормально.
Если вы не хотите писать свой собственный JSON-кодер, вы можете обратиться к Zend_Json
, кодер JSON для Zend Framework. Он включает в себя возможность справиться с выражениями JSON .
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(){}}
Я пишу эту простую функцию для всей функции json, основанной на помощи my myabe, помогите кому-то:
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; }
Вы можете попробовать следующее:
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 } });
Заключительная часть в PHP, похоже, сейчас решена. Вы можете использовать
json_encode($p, JSON_UNESCAPED_UNICODE)
таким образом ваша функция не будет экранирована. Однако
Эта функция также может помочь:
function jsonify($var){ return str_ireplace(array("'function",'"function',"}'",'}"'),array("function",'function',"}",'}'),json_encode($var)); }