Home >Backend Development >PHP Tutorial >javascript - 关于PHP处理JSON的问题。

javascript - 关于PHP处理JSON的问题。

WBOY
WBOYOriginal
2016-06-06 20:19:141317browse

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

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

有没有什么办法使生成的结果中可以使用 JS的 匿名函数?
好多JS库的配置都是JSON的,但是他的配置有些使用的匿名函数来返回结果,这时候从服务端发回配置的时候,正常的
key-value配置转JSON可爽了,可是碰到JS的匿名方法就玩脱了。。。。

其实我就要这样的....

<code>var jsonText = {
    title: '提示',
    content: '按钮回调函数返回 false 则不许关闭',
    okValue: '确定',
    ok: function () {
        this.title('提交中…');
        return false;
    },
    cancelValue: '取消',
    cancel: function () {}
};</code>

然而生成的却是

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

其中匿名方法,如你所见,被转成字符串了,玩脱了。。。
根据楼下兄弟的提点,完整的解决办法如下

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

生成的json如下

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

回复内容:

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

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

有没有什么办法使生成的结果中可以使用 JS的 匿名函数?
好多JS库的配置都是JSON的,但是他的配置有些使用的匿名函数来返回结果,这时候从服务端发回配置的时候,正常的
key-value配置转JSON可爽了,可是碰到JS的匿名方法就玩脱了。。。。

其实我就要这样的....

<code>var jsonText = {
    title: '提示',
    content: '按钮回调函数返回 false 则不许关闭',
    okValue: '确定',
    ok: function () {
        this.title('提交中…');
        return false;
    },
    cancelValue: '取消',
    cancel: function () {}
};</code>

然而生成的却是

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

其中匿名方法,如你所见,被转成字符串了,玩脱了。。。
根据楼下兄弟的提点,完整的解决办法如下

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

生成的json如下

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

函数是无法通过json_encode方法来转换的,能转换的只有数据。你觉得这个简单的函数能帮你实现把php代码转为js代码的功能吗?

不过,其实还是有办法的,你这么搞

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

然后在js端eval一下就好了

<code class="js">data = JSON.parse(json);
data.d = eval(data.d);</code>

更新

查看相关文档发现js如果遇到json的字符串是这种形式的function() {,就会报语法错误。解决方法是把这一段去掉

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

然后在解析的时候用匿名函数去执行

<code class="js">function getVal(str) {
    return function () { return eval(str); };
}

data = JSON.parse(json);
data.d = getVal(data.d);
console.log(data.d());</code>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn