json配置文件
服务器端框架中JSON解析的可用性不断增长,将JavaScript的功能扩展到客户端编程之外,从而为通用数据交换格式提供了基本语法。 好吧
但是,这种优势的一个立即体现就是能够为Ajax开发提供独立于语言的配置文件 。
简而言之,JavaScript对象字面量可以用(例如) PHP解析为JSON ,以创建相应的关联数组。
考虑一个简单的配置对象,如下所示:
const config = {
'lang' : 'en',
'host' : 'sitepoint.com'
};
我们可以将其包含在常规的<script>
并使用JavaScript对其属性进行访问:
alert(config['lang']); //outputs "en"
都好。 但是我们也可以将其导入PHP并进行如下解析:
$datastring = file_get_contents('config.js');
$regexes = array(
array("p"=>"/[w]*(//).*$/m", "r"=>""), //remove comments
array("p"=>"/'/m", "r"=>""") //replace single-quotes with double-quotes
);
foreach($regexes as $regex)
{
$datastring = preg_replace($regex['p'], $regex['r'], $datastring);
}
preg_match("/config[ ]?=[ ]?{([^;]+)\;/", $datastring, $matches);
$config = json_decode('{' . $matches[1], true);
然后,我们在PHP关联数组中具有相同的数据:
echo $config['lang']; //outputs "en"
PHP中JSON解析的可用性
本地功能json_encode和json_decode直到5.2版才添加到PHP 。 如果您使用的是早期版本,则需要自己实现它们,为此,我建议Michal Migurski的JSON Services类 。 这样做的唯一缺点是,它仅支持转换为对象,而不转换为关联数组(由本机函数中的true
标志触发)。
但是,您可以使用递归对象到数组的转换来解决此问题。 这是一个小片段。 我没有写这个,但是我恐怕也不记得在哪里找到它的:
function object_to_array($data)
{
if(is_array($data) || is_object($data))
{
$result = array();
foreach($data as $key => $value)
{
$result[$key] = object_to_array($value);
}
return $result;
}
return $data;
}
然后,您将可以像这样进行原始转换:
$config = object_to_array(json_decode('{' . $matches[1]));
结论
这样做的好处是显而易见的-应用程序的客户端层和服务器端层都可以从单个托管源获取其配置数据。
翻译自: https://www.sitepoint.com/using-json-for-language-independent-configuration-files/
json配置文件