【问题标题】:php json_encode saves boolean in string formatphp json_encode 以字符串格式保存布尔值
【发布时间】:2017-02-19 21:41:22
【问题描述】:

试图将 php 对象数组保存到 json 文件中,但布尔属性保存在字符串中:

[
    {
        "title" : "My Page",
        "url"   : "mypage",
        "type"  : "content",
        "final" : "false" // supposed to be simply false
    }
]

为什么? ...有没有我可以使用的标志或什么?目前我正在使用JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK

【问题讨论】:

  • 测试早在 PHP 5.4-PHP 7,你的示例数组总是正确编码。数组中final 的类型必须是字符串。
  • 向我们展示一个对象的 var_dump

标签: php arrays json


【解决方案1】:

我感觉转换工作正常,并且该值实际上是一个字符串。您可以通过gettype($var)确认。

请注意,URL 编码只为您提供字符串值。您可以尝试切换到 JSON。

为了让 PHP 能够处理 application/json,添加这个函数,然后调用它:

function convertJsonBody() {
     $methodsWithDataInBody = array(
          'POST',
          'PUT',
     );

     if (
          isset($_SERVER['CONTENT_TYPE'])
          && (strpos(strtolower($_SERVER['CONTENT_TYPE']), 'application/json') !== FALSE)
          && isset($_SERVER['REQUEST_METHOD'])
          && in_array($_SERVER['REQUEST_METHOD'], $methodsWithDataInBody)
     ) {
          $_POST = json_decode(file_get_contents('php://input'), TRUE);
          foreach($_POST as $key => $value) {
               $_REQUEST[$key] = $value;
          }
     }
} 

【讨论】:

  • 你是对的,这可能是我将数据传递到服务器的方式。我会尝试改变这一点
  • 标头中的数据是这样传递的:data[1][final]:true - 收到数据后是否需要在服务器上进行进一步处理?
  • 如果你使用urlencoding,所有的值都是字符串。您必须转换为布尔值。或者您可以切换到使用 JSON 内容类型(“application/json”)。
  • PHP 本身不理解 JSON。如果你只是想完成它,你可以试试$_POST = json_decode(file_get_contents('php://input'), TRUE);
  • 这使 PHP 能够处理 application/json(虽然它又快又脏——也可以检查 $_SERVER["REQUEST_METHOD"] 和 $_SERVER["CONTENT_TYPE"],并填充 $_REQUEST) .
猜你喜欢
  • 2014-06-02
  • 1970-01-01
  • 2014-03-30
  • 2011-02-05
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 2011-01-16
  • 2012-01-06
相关资源
最近更新 更多