首页 > 解决方案 > 在 Json PHP 输出中转换数组不符合预期

问题描述

将 PHP 数组转换为 Json 时遇到一些问题。有关更多上下文,这是代码:

`<?php

$Users = array();
$file = fopen('usersFile.csv', 'r');
$row = fgets($file);
$ColumnKeys = explode(',', $row);
while (!feof($file)) {
    $row = fgets($file);
    $userData = explode(',', $row);
    for ($i=0; $i<sizeof($columnkeys); $i++) { 
        $user[$columnKeys[$i]] = $userData[$i];
    }
    array_push($Users, $user);
}
fclose($file);
echo json_encode($Users);

?>`

包含用户数据的 csv 文件是这样的:

id,name,docNumber,dateBirth

1,马里奥马里奥,1694370,06/11/1953

2,保罗佩普,1725614,24/04/1964

输出如下所示:

[{"id":"1","name":"Mario Mario","docNumber":"1694370","dateBirth\r\n":"06\11\1953\r\n"}, {"id":"2","name":"Pau Pep","docNumber":"1725614","dateBirth\r\n":"24\04\1964\r\n"}]

我不知道为什么在输出中 $Users 数组在 dateBirth 中包含元字符及其值。快把我逼疯了。

标签: phparraysjsoncsv

解决方案


似乎有一个名为 JSON_UNESCAPED_SLASHES 的 json_encode 选项

<?php
$Users = array();
$file = fopen('usersFile.csv', 'r');
$row = fgets($file);
$columnKeys = explode(',', trim($row));
while (!feof($file)) {
    $row = fgets($file);
    $userData = explode(',', trim($row));
    for ($i=0; $i<sizeof($columnKeys); $i++) { 
        $user[$columnKeys[$i]] = $userData[$i];
    }
    array_push($Users, $user);
}
fclose($file);
echo json_encode($Users, JSON_UNESCAPED_SLASHES);
?>

输出:

[{"id":"1","name":"Mario Mario","docNumber":"1694370","dateBirth":"06/11/1953"},{"id":"2","name":"Pau Pep","docNumber":"1725614","dateBirth":"24/04/1964"}]

推荐阅读