将PHP数组转换为JSON时出现错误

3

我在将一个多维PHP数组转换为JSON时遇到了一些问题。我使用json_encode进行转换,但结果是null。

我正在尝试开发一个组织结构图,数据从CSV文件中读取并保存在数组中。布局和JS代码都是为接收JSON文件而构建的,因此我需要以该格式呈现。

这是数组的一部分,其中包含175个数组。

Array
(
    [2] => Array
        (
            [id] => 1
            [nome] =>  ELOTECH
            [cargo] => "" 
            [idcargo] => 1
            [pai] => 0
        )

    [3] => Array
        (
            [id] => 10
            [nome] => Departamento Pessoal
            [cargo] => 
            [idcargo] => 10
            [pai] => 1
        )

    [4] => Array
        (
            [id] => 20
            [nome] => Comercial
            [cargo] => 
            [idcargo] => 20
            [pai] => 1
        )

我正在使用json_encode将数组转换为JSON。 注意:*** $colab是由CSV提供的数组的名称。

$dados_json = json_encode($colab);
$fp = fopen("jsonOrgan.json", "w");
$write = fwrite($fp, $dados_json);
fclose($fp);

我需要它以以下JSON输出:
[{
    "id": 1,
    "cargo": "ELOTECH",
    "nome": "",
    "idcargo": 1,
    "pai": 0
}]

但是它返回null

以下是我从CSV文件中创建数组的方法。

while ($line = fgetcsv($save, 1000, ";")) {
    if ($linha++ == 0) {
        continue;
    }
 $colab[$linha] = [
                'id' => $line[0],
                'nome' => $line[1],
                'cargo' => $line[4],
                'idcargo' => $line[0],
                'pai' => $line[5],
            ];}

2
In English por favor - RiggsFolly
2
@RiggsFolly OP已经编辑过了。我投票支持重新开放。 - Funk Forty Niner
1
我会尝试在这里放置。你的问题是由于数组使用数字作为键索引,你必须将类似 $arr[$number]["nome"] = "asdasd" 的内容更改为类似 $arr[] = [ "nome" => "aasda", "id" => 123 ] 的形式。 - Roger Russel
1
你可以使用函数"json_last_error_msg()"来查看发生了哪个错误。通常,json_encode中的null是由于数组中的值错误引起的,例如 "nome" => "Técnico",如果它没有用UTF8编码,则必须在使用json_encode之前使用utf8_encode进行编码。 - Roger Russel
1
@RogerRussel 应该为此发布一个答案并正确关闭问题。 - Funk Forty Niner
显示剩余16条评论
1个回答

3

在Roger Russel的指导下,我的问题得到了解决。

由于编码问题,JSON返回值为空。我使用了uft8_encode函数解决了这个问题。 然后我改变了数组的创建方式以适应需要生成的JSON文件格式。

之前我是按照计数器作为索引来创建数组的,如下所示:

$colab[$linha] = [
                'id' => $line[0],
                'nome' => $line[1],
                'cargo' => $line[4],
                'idcargo' => $line[0],
                'pai' => $line[5],
            ]

然后将其更改为不通过传递索引进行创建:

$colab[] = [
                    'id' => $line[0],
                    'nome' => $line[1],
                    'cargo' => $line[4],
                    'idcargo' => $line[0],
                    'pai' => $line[5],
                ]

问题解决了!

谢谢!


做得好,能够自己找到问题并解决,然后分享给其他人,继续保持良好的工作状态 :) - Motassem Kassab
1
这不是我自己做的,@Roger Russel完成了所有工作。 - Jean Lima
1
我很高兴能为您服务。 - Roger Russel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接