У меня есть файл .CSV с заголовками:
Description, BusinessSurname, IsCustomer, IsSupplier, AddressType, Business Address, IsInternational.
Первая строка:
Contact1, Contact1, True, True, Business, 123 Fake St, False
Оставшиеся строки не важны, это еще что-то похожее – примеры. У меня есть несколько строк данных.
Мне нужно получить его в формате json:
{ Description:'Desc_47AE3208-87F5-4BBA-BE40-AA4130AB4768', SurnameBusinessName:'Name_Business', IsCustomer:true, IsSupplier:true, Addresses: [ {AddressType:'Business',Line1:'addr1_bus',IsInternational:false}, {AddressType:'Postal',Line1:'addr1_pos',IsInternational:true} ] }
Я пробовал несколько разных способов, но никто из них не дал мне такого json, как адрес с вложенным адресом. Я могу оставить второй адрес (почтовый адрес).
Если я использую этот код:
$filename = 'contacts1.csv'; $handle = fopen($filename, 'r'); $count = 0; while (($data = fgetcsv($handle)) !== FALSE) { $count++; if ($count == 1){ continue; } $json = json_encode($data, true); echo $json; };
Я получаю это, например:
["Contact1","Contact1","TRUE","TRUE","Business","123 High Street Sydney NSW 2000","FALSE"] ["Contact2","Contact2","TRUE","TRUE","Business","124 High Street Sydney NSW 2000","FALSE"] ["Contact3","Contact3","TRUE","TRUE","Business","125 High Street Sydney NSW 2000","FALSE"]
Есть ли способ получить json, в котором я нуждаюсь, и если я не могу получить требуемый json автоматически, есть способ, который я могу извлечь значения каждой строки и назначить переменной, и вручную создать требуемый json для каждого строка, используя цикл for, while loop и т. д.? НАПРИМЕР:
{ Description: $description, SurnameBusinessName: $BusinessSurname, etc... }
Я нашел ответ на этот вопрос, однако я отказался от этой конечной точки API и пошел к более простой, не вложенной. Из-за строгости json-формата, который этот API будет принимать, я в основном назначил каждое значение из моего csv переменной и вручную создал json. Хотя этот код ниже для конечной точки Учетных записей, я могу использовать тот же самый метод для любой конечной точки, потому что я как бы вручную создаю json. И его единственный способ, которым это может работать, я думаю, поскольку некоторые поля – это строки, такие как AccountName, некоторые целые числа, такие как AcountType.
$file = 'acc.csv'; $mode = 'r'; $handle = fopen($file, $mode); while(($csv = fgetcsv($handle)) !==FALSE){ foreach($csv as $row => $value){ $data = $row.$value; switch ($row){ case '0': $accounttype = $value; break; case '1': $accountname = $value; break; case '2': $hint = $value; break; case '3': $status = $value; break; case '4': $sortorder = $value; break; case '5': $accountcode = $value; break; case '6': $parentaccountcatid = $value; $json = " { AccountType:" . $accounttype . ", AccountName:'" . $accountname . "', Hint:'" . $hint . "', Status:" . $status . ", SortOrder:" . $sortorder . ", AccountCode:'" . $accountcode . "', ParentAccountingCategoryID:'" . $parentaccountcatid . "' }"; //echo $json;