我目前正在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"
}
答案 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);