2009-11-16 32 views
20

Bir javascript işlevini PHP'de bir JSON nesnesine kodlamam gerekiyor.PHP json_encode ve javascript işlevleri

Bu:

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

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

çıkışlar:

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

İstediğim geçerli:

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

Ben json_encode ile bunu yapabilir mi?

cevap

9

Hayır. JSON özellikleri işlevleri desteklemez. JSON benzeri bir biçimde çıktı almak için kendi kodunuzu yazabilirsiniz ve yine de iyi çalışmalıdır. Jani söylediği gibi

6

sen Zend için, Zend_Json için JSON kodlayıcı çare olabilir kendi JSON kodlayıcı yazmaya istemiyorsanız Çerçeve. JSON expressions ile baş edebilme özelliğini içerir.

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 
    } 
}); 
+1

İyi Tanrım, bu harika. –

-1

Bu deneyebilirsiniz. Sadece işlevin başlangıcını ve sonunu belirtmek için bazı benzersiz dizeler kullanın. Sonra alıntıları kaldırmak için str_replace kullanın.

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

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

çıkışı olacaktır:

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

json dizeye verilen diziyi ayrıştırmak json_decode, böylece bir dize olarak onunla oynayabilir:

+0

Karakterleri kullanabilmek için küçük bir değişken: preg_match_all ('/ \ # ([^ \ #] *) \ # /', json_encode ($ json), $ unescape); foreach ($ unescape ['0'] $ anahtar => $ fn olarak) { $ string = str_replace ($ fn, json_decode ($ unescape ['0'] [$ key]), $ dize); } – Allartk

-1

PHP'de şifreleme bu kez bir parçası gibi görünüyor edilir Şimdiye kadar çözüldü. Sen

json_encode($p, JSON_UNESCAPED_UNICODE)

sizin işlev kaçmış olmayacak bu şekilde kullanabilirsiniz. artık gerçekten JSON olmasa,

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; 
} 
+0

Bunun bence ne yaptığını düşünüyorsun (http://php.net/manual/en/json.constants.php#constant.json-unescaped-unicode).Bu, işlevlerle ilgisi olmayan unicode karakterlerden kaçmak değildir. – cpburnz

0

Bütün json fonksiyonu tabanlı yardım benim myabe yardım birisi için bu basit işlevi yazın.