I’m trying to turn a CSV into a JSON object made of nested arrays for each row within the file.
I’ve tried a handful of similar SO questions but haven’t found quite the right solution.
I’m attempting to set up a JSON object with a handful of nested objects, based on the first value in each row of the CSV.
My CSV file, titled data_source.csv looks like:
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
My PHP code (in a controller in 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()
}
The ideal situation would be a single JSON object with a series of nested objects, like:
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
}
}
Is my PHP code set up as effectively as possible?
When I run this on my local environment, I receive an error message that reads: ‘LogicException: The controller must return a response ([the json object])’
So my JSON object is included in the error message, which is encouraging but it’s unclear why it’s part of a LogicException.
Advertisement
Answer
Maybe you need to return a JsonResponse
use SymfonyComponentHttpFoundationJsonResponse;
return new JsonResponse($json_object);