2015-11-20 124 views
0

我有以下的以.json(保存为一个文件名为:settings.json):JSON布尔被转换成字符串

[{"compact": false, "noPadding": true}] 

点击之后,我想为“紧凑型”的布尔改变它的反面州。这是 我的函数来做到这一点(那里有反应,在那里的一点点,但我认为它不应该不管我的问题):

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); 
    }); 
} 

<?php 
file_put_contents($_POST['filename'], json_encode($_POST['data'])); 
return ($_POST['data']); 

但现在我的布尔已经成为字符串(我不希望):然后通过执行write.php写回我以.json

[{"compact": "true","noPadding": "true"}] 

我认为问题是要么与JavaScript弱打字或我的PHP,但我不能找出解决方案。

在这种情况下,我该如何将布尔作为布尔值?

+1

POST数据始终是一个字符串。您可能需要循环播放数据并进行转换,或者在编码之前单独进行转换。施放0和1会更容易。 – AbraCadaver

回答

2

问题是POST数据总是一个字符串。这就是它是如何工作的?

但是你可以通过你的POST数据迭代,并使用PHP的filter_var的字符串转换为布尔

filter_var(YOUR_POSTDATA, FILTER_VALIDATE_BOOLEAN);