解析PHP数组在JavaScript

问题描述:

我有一些PHP源代码,简单的键值数组这样的:解析PHP数组在JavaScript

return array('var1' => 'var2'); 

而且

return array('sub' => array('var1' => 'var2')); 

,我需要把它解析为JavaScript对象,因为我有一个PHP库的JavaScript实现,我想用原始测试用例来测试兼容性。

有超过100个测试,所以手动转换是不实际的。

有没有简单的方法将这些转换成JavaScript对象而不使用PHP?

+1

为什么不使用JSON?为什么没有PHP? – elclanrs 2013-04-20 08:28:25

+0

Json很好,但由于测试框架在node.js应用程序中运行,PHP不是一个好选择。 – mabs 2013-04-20 11:24:49

要真正回答你的问题 - 如何在不使用PHP的情况下将PHP的关联数组解析为JSON - 让我们使用一些JavaScript代码。

"array('sub' => array('var1' => 'var2'));".replace(/array\(/g, '{').replace(/\)/g, '}').replace(/=>/g, ':').replace(/;/g, '').replace(/'/g, '"'); 

这是假设你恰好坐在一些源代码,并希望将其复制到Node.js应用,并且所有的数据看起来完全一样。如果数据恰好在多行上,如果你甚至想解析“return”/“;”部分,如果某些数据包含索引数组,或者任何值包含我只是天真解析的字符串,则必须使该脚本更智能。

正如其他人所说,如果您正在与PHP服务交互,只需使用json_encode()即可。

+1

谢谢,这比我想象的要简单得多。 – mabs 2013-04-22 03:03:46

您可以在PHP中使用json_encode(),在JavaScript中使用JSON.parse()

如果我理解正确的话,你需要使用json_encode()这样的:

return json_encode(array('sub' => array('var1' => 'var2'))); 

返回值:{"sub":{"var1":"var2"}}

这应该工作!

<?# somefile.php ?> 
<script type="text/javascript"> 
    var json = '<?= json_encode(array('sub' => array('var1' => 'var2'))) ?>'; 
    var object = JSON.parse(json); 
    console.log(object); 
</script> 

输出

{ 
    sub: { 
    var1: "var2" 
    } 
} 

更常见的是,你会看到一个语言无关的API,它只是提供了JSON响应。您可以使用JavaScript(通过Node.js等在浏览器中)对API的异步请求轻松地对此进行测试;

+1

是否需要'JSON.parse'?如果你写'var object = array('var1'=>'var2')))?>;'而不是? – user2264587 2013-04-20 09:12:35

+0

对象文字未在JSON中定义;它们在JavaScript的[对象字面值语法](https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Values,_variables,_and_literals#Object_literals)中定义。它们是相似的,但它们并不相同。 – naomik 2013-04-20 09:14:42

+0

我认为JSON是对象文字语法的一个子集,因此如果某些东西是有效的JSON,它将是一个有效的文字? – user2264587 2013-04-20 09:17:48