javascript - 關於PHP處理JSON的問題。

來源:互聯網
上載者:User
$array = ['a'=>'b','b'=>'c','d'=>function(){    return 'e';}];echo json_encode($array);  

產生的JSON 如下
{"a":"b","b":"c","d":{}}

有沒有什麼辦法使產生的結果中可以使用 JS的 匿名函數?
好多JS庫的配置都是JSON的,但是他的配置有些使用的匿名函數來返回結果,這時候從服務端發回配置的時候,正常的
key-value配置轉JSON可爽了,可是碰到JS的匿名方法就玩脫了。。。。

其實我就要這樣的....

var jsonText = {    title: '提示',    content: '按鈕回呼函數返回 false 則不許關閉',    okValue: '確定',    ok: function () {        this.title('提交中…');        return false;    },    cancelValue: '取消',    cancel: function () {}};

然而產生的卻是

{"title":"\u63d0\u793a","okValue":"\u786e\u5b9a","ok":"function(){return \"\u63d0\u4ea4\u4e2d...\";}"}

其中匿名方法,如你所見,被轉成字串了,玩脫了。。。
根據樓下兄弟的提點,完整的解決辦法如下

$data = ['title'=>'提示','okValue'=>'確定','ok'=>'function(){return "提交中...";}'];$json = json_encode($data);$json = str_replace(['"function','}"'],['function','}'], $json);echo $json;

產生的json如下

{"title":"\u63d0\u793a","okValue":"\u786e\u5b9a","ok":function(){return \"\u63d0\u4ea4\u4e2d...\";}}

回複內容:

$array = ['a'=>'b','b'=>'c','d'=>function(){    return 'e';}];echo json_encode($array);  

產生的JSON 如下
{"a":"b","b":"c","d":{}}

有沒有什麼辦法使產生的結果中可以使用 JS的 匿名函數?
好多JS庫的配置都是JSON的,但是他的配置有些使用的匿名函數來返回結果,這時候從服務端發回配置的時候,正常的
key-value配置轉JSON可爽了,可是碰到JS的匿名方法就玩脫了。。。。

其實我就要這樣的....

var jsonText = {    title: '提示',    content: '按鈕回呼函數返回 false 則不許關閉',    okValue: '確定',    ok: function () {        this.title('提交中…');        return false;    },    cancelValue: '取消',    cancel: function () {}};

然而產生的卻是

{"title":"\u63d0\u793a","okValue":"\u786e\u5b9a","ok":"function(){return \"\u63d0\u4ea4\u4e2d...\";}"}

其中匿名方法,如你所見,被轉成字串了,玩脫了。。。
根據樓下兄弟的提點,完整的解決辦法如下

$data = ['title'=>'提示','okValue'=>'確定','ok'=>'function(){return "提交中...";}'];$json = json_encode($data);$json = str_replace(['"function','}"'],['function','}'], $json);echo $json;

產生的json如下

{"title":"\u63d0\u793a","okValue":"\u786e\u5b9a","ok":function(){return \"\u63d0\u4ea4\u4e2d...\";}}

函數是無法通過json_encode方法來轉換的,能轉換的只有資料。你覺得這個簡單的函數能幫你實現把php代碼轉為js代碼的功能嗎?

不過,其實還是有辦法的,你這麼搞

$array = ['a'=>'b','b'=>'c','d'=>'function(){return "e";}'];echo json_encode($array); 

然後在js端eval一下就好了

data = JSON.parse(json);data.d = eval(data.d);

更新

查看相關文檔發現js如果遇到json的字串是這種形式的function() {,就會報語法錯誤。解決方案是把這一段去掉

$array = ['a'=>'b','b'=>'c','d'=>"return 'e'"];echo json_encode($array); 

然後在解析的時候用匿名函數去執行

function getVal(str) {    return function () { return eval(str); };}data = JSON.parse(json);data.d = getVal(data.d);console.log(data.d());
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.