我有以下.json(保存为名为:settings.json的文件):
[{"compact": false, "noPadding": true}]
点击后,我想更改" compact"的布尔值到了相反的状态。这是 我的功能(在那里有一点反应,但我觉得这对我的问题不重要):
onClick={editJson(this, "settings", "compact", this.context.settings[0]["compact"], !this.context.settings[0]["compact"])}
执行以下功能:
function editJson(component, filename, field, oldvalue, newvalue) {
var json = component.state[filename] || [];
var i;
for (i = 0; i < json.length; i++) {
if (json[i][field] === oldvalue) {
json[i][field] = newvalue
}
}
$.post('json/write.php', {filename: filename + '.json', data: json}).then(function (data) {
queryJson(component, filename);
});
}
然后通过执行write.php写回我的.json:
<?php
file_put_contents($_POST['filename'], json_encode($_POST['data']));
return ($_POST['data']);
但现在我的布尔变成了弦乐(我不想要):
[{"compact": "true","noPadding": "true"}]
我认为问题是javascripts弱打字或我的PHP,但我无法找出解决方案。
在这种情况下,如何将布尔值保持为布尔值?
答案 0 :(得分:2)
问题是POST数据总是一个字符串。这就是它的工作原理......
但是你可以遍历你的POST数据并使用PHP的filter_var
将字符串转换为布尔值
filter_var(YOUR_POSTDATA, FILTER_VALIDATE_BOOLEAN);