我正试图将CSV转换为JSON对象,该对象由文件中每行的嵌套数组组成。
我试过一些类似的SO问题,但没有找到完全正确的解决方案。
我试图根据CSV每行中的第一个值,用一些嵌套对象来设置一个JSON对象。
我的CSV文件,标题为data_source.CSV,看起来像:
Organisation ID,Organisation Name,Postcode,Industry
111,Organisation A,SW2 4DL,School
123,Organisation B,S2 5PS,School
234,Organisation C,EC2 3AD,School
...there are several more rows
我的PHP代码(在Drupal 8中的控制器中(:
namespace Drupalwebform_autocomplete_csvController;
use DrupalCoreControllerControllerBase;
class WebformAutocompleteCsvController extends ControllerBase {
public function content() {
//make sure file can be accessed
if (($handle = fopen('sites/default/files/data_source.csv', 'r')) === false) {
die('Error opening file');
}
$organisation_id = fgetcsv($handle);
//take the first value on each row
array_shift($organisation_id);
//create an array
$data = array();
while ($row = fgetcsv($handle)) {
$key = array_shift($row);
$data[$key] = array_combine($organisation_id, $row);
}
$json_object = json_encode($data);
return $json_object;
} //close content()
}
理想的情况是一个带有一系列嵌套对象的JSON对象,例如:
Object {
111 {
Organisation Name:Organisation A,
Postcode: SW2 4DL,
Industry: School
},
123 {
Organisation Name:Organisation b,
Postcode: S2 5PS,
Industry: School
},
234 {
Organisation Name:Organisation C,
Postcode: EC2 3AD,
Industry: School
}
}
我的PHP代码设置是否尽可能有效?
当我在本地环境上运行此程序时,我收到一条错误消息,内容为:"LogicException:控制器必须返回响应([json对象](">
因此,我的JSON对象包含在错误消息中,这是令人鼓舞的,但不清楚为什么它是LogicException的一部分。
也许您需要返回JsonResponse
use SymfonyComponentHttpFoundationJsonResponse;
return new JsonResponse($json_object);