【问题标题】:php json encode not encoding arrayphp json编码不编码数组
【发布时间】:2023-03-12 12:53:01
【问题描述】:

我有 php 数组,例如 (( print_r($fdata); ))

Array
(
    [status] => YES
    [data] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [0] => Need
                            [1] => Am need
                        )
                )
            [1] => Array
                (
                    [0] => Array
                        (
                            [0] => 0
                            [1] => No deductibles and no copayments.
                        )
                    [1] => Array
                        (
                            [0] => 1
                            [1] => No lifetime limit—policy won't terminate based on number or dollar amount of claims paid.
                        )
                )
            [2] => Array
                (
                    [0] => Array
                        (
                            [0] => Volvo
                            [1] => 22
                            [2] => 18
                        )

                    [1] => Array
                        (
                            [0] => Volvo
                            [1] => 22
                            [2] => 18
                        )
                )
            [3] => Array
                (
                    [0] => Array
                        (
                            [0] => Volvo
                            [1] => 22
                            [2] => 18
                        )
                    [1] => Array
                        (
                            [0] => Volvo
                            [1] => 22
                            [2] => 18
                        )
                )
        )
)

我想将它编码为 json,但是当我将它传递给“json_encode”函数时,它会打印空白结果! 关于我的 php 代码 我已经声明了几个我从数据库加载数据的 php 数组

$fdata = array();   // final data to process
$product = array();  // product info
$adv_arr = array();  // advantages
$benefits_arr = array();  // benefits
$limits_arr = array();  // limits
$terms_arr = array();  // terms

加载到数组后,我将它们推送到另一个数组,例如

  $ffdata = array();
  array_push($ffdata , $product ,$adv_arr,$benefits_arr,$terms_arr);    

然后它结束了我尝试编码但没有结果

  $fdata['status'] = "YES";
              $fdata['data'] = $ffdata;
     echo json_encode($fdata);   

我正在尝试生成 json 数据结果,例如 :: http://s1.postimg.org/efvvx74xr/C29_CA6_EA8_CAA946_E44076_CA72_B98502932_BA2_A6_DE4517_FB.jpg

样本数据::http://www.datafilehost.com/d/58c5d154

【问题讨论】:

  • 尝试使用 print_r($fdata) 打印 $fdata 并检查它是否为空。
  • 上面我打印的数组实际上是 $fdata ,这意味着它不是空的
  • 尝试做 print_r(json_encode($fdata));
  • 删除此字符串后尝试limit—policy won't
  • 是一个特殊字符导致了问题 -

标签: php json


【解决方案1】:

如果json_encode()在编码数据集时遇到错误,则返回false,而不是echo

为了确定操作是否错误,您可以使用json_last_error()json_last_error_msg() 来确定问题所在。

例如:

$json = json_encode($data);

if (json_last_error() !== JSON_ERROR_NONE) {
    throw new RuntimeException(json_last_error_msg());
}

如果出现问题,这应该提供一些更有意义的信息。

此时,如果您得到的是 WSOD 而不是任何输出,那么您可能会遇到不同的问题;例如:致命或解析错误。在这种情况下,您应该确保在开发过程中启用错误报告(并且至关重要的是,确保它在您的生产环境中禁用!)。

通常,最简单的方法是在脚本顶部添加以下内容:

<?php

error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', true);

希望这会有所帮助:)

【讨论】:

  • 嗨。看看JSON error codes。 5 代表JSON_ERROR_UTF8 。看起来您的 UTF8 数据格式不正确。要获得更有意义、人类可读的错误消息,请使用 echo json_last_error_msg();
  • 未捕获的异常 'RuntimeException' 并在 # 行显示消息“格式错误的 UTF-8 字符,可能编码不正确”
  • 确实如此。您需要查看您的数据,这就是问题所在。您是从数据库中还是从其他地方提取它?如果您想更新您的问题以提供此数据的示例,我们也许可以进一步调试。目前我们只能确定为什么会出现问题,而不是什么:)
  • 看起来 json 无法编码特殊字符,例如 —
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多