2015-11-20 172 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);