输出带有标头字段的JSON? (作为数据集的ID)

时间:2019-04-25 17:01:33

标签: php json

我目前正在PHP中进行以下操作;将CSV文件转换为可用的JSON。这是可行的...。

  $tmpName = $_FILES['csv']['tmp_name'];

    move_uploaded_file($tmp_name, "/files/locations/");

    $fh = fopen($tmpName, "r");

    $csvData = array();
    $keys = fgetcsv($fh, 0, ",");
    while (($row = fgetcsv($fh, 0, ",")) !== FALSE) {
        $csvData[] = array_combine($keys, $row);
    }
    // echo json_encode($csvData);
    file_put_contents("/files/locations/locations.json",json_encode($csvData))    

它正在这样输出JSON:

{"Zipcode":"90210","City":"Something","Primary State":"Utah","County Code":"49530","County":"Loudoun"}

我想要Zipcode字段,它的值应该是标题。因此,如下所示,因此我可以使用Zipcode值作为数据集的ID。这可能吗?

   {
    "Zipcode":"90210": { 
        "City":"Something",
        "Primary State":"Utah",
        "County Code":"49530",
        "County":"Loudoun"
    }

1 个答案:

答案 0 :(得分:2)

将行分配到数组中,而不是将其推入数组中。

$csvData[$row[0]][] = array_combine($keys, $row);

这假定邮政编码位于该行的第一个字段中(因为它似乎来自您的原始JSON示例)。

使用[]可使每个邮政编码条目组成一个位置数组。因此结果将如下所示:

{ "90210": [
    {
        "Zipcode": "90210",
        "City":"Something",
        "Primary State":"Utah",
        "County Code":"49530",
        "County":"Loudoun"
    }]
}

如果您不想将邮政编码多余地包含在数组元素中,则可以将其从键和值中删除。

$keys = array_slice($keys = fgetcsv($fh, 0, ","), 1);

$zip = array_shift($row);
$csvData[$zip][] = array_combine($keys, $row);