json配置文件_将JSON用于与语言无关的配置文件

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_encodejson_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配置文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值