PHP: Вывести сложный JSON в CSV - PullRequest
0 голосов
/ 05 февраля 2019

Я ищу решение для рендеринга строки json, подобной этой:

 {"result_count":5,"total_count":"1102","next_offset":5,"entry_list":[{"id":"00003010000000","module_name":"Contacts","name_value_list":{"id":{"name":"id","value":"00003010000000"},"name":{"name":"name","value":"Undefiniert"},"phone_work":{"name":"phone_work","value":""},"phone_mobile":{"name":"phone_mobile","value":"01"}}},{"id":"00003015000003","module_name":"Contacts","name_value_list":{"id":{"name":"id","value":"00003015000003"},"name":{"name":"name","value":"Christian X"},"phone_work":{"name":"phone_work","value":""},"phone_mobile":{"name":"phone_mobile","value":"0043 699 23231"}}},{"id":"00003015000005","module_name":"Contacts","name_value_list":{"id":{"name":"id","value":"00003015000005"},"name":{"name":"name","value":"Mario X"},"phone_work":{"name":"phone_work","value":"0043 1 232 151"},"phone_mobile":{"name":"phone_mobile","value":"0043 699 1112"}}},{"id":"00003015000006","module_name":"Contacts","name_value_list":{"id":{"name":"id","value":"00003015000006"},"name":{"name":"name","value":"Renate X"},"phone_work":{"name":"phone_work","value":"0043 1232 133"},"phone_mobile":{"name":"phone_mobile","value":""}}},{"id":"00003015000007","module_name":"Contacts","name_value_list":{"id":{"name":"id","value":"00003015000007"},"name":{"name":"name","value":"Harald KrX"},"phone_work":{"name":"phone_work","value":"0043 232 150"},"phone_mobile":{"name":"phone_mobile","value":"00423"}}}],"relationship_list":[{"link_list":[{"name":"accounts","records":[{"link_value":{"name":{"name":"name","value":"(X) X"}}}]}]},{"link_list":[{"name":"accounts","records":[{"link_value":{"name":{"name":"name","value":"(Y) Y"}}}]}]},{"link_list":[{"name":"accounts","records":[{"link_value":{"name":{"name":"name","value":"(C) C"}}}]}]},{"link_list":[{"name":"accounts","records":[{"link_value":{"name":{"name":"name","value":"(D) D"}}}]}]},{"link_list":[{"name":"accounts","records":[{"link_value":{"name":{"name":"name","value":"(E) E"}}}]}]}]}

в CSV-файл, где итоговое содержимое равно

"ID","NAME","PHONE_WORK","PHONE_MOBILE","COMPANY"

, поэтому в этом примере:

"00003015000003","Christian X","","0043 699 23231","X"<br/>
....<br/>
...

Полагаю, это довольно сложно ... но, может быть, кто-то может мне здесь помочь.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Это то, что вы хотите, с названием компании:

$array = json_decode($JSON,true);

/*get companies name*/
$companies = array_map(function($arr){
  array_walk_recursive($arr,function($a,$key) use (&$return) { return $return[$key] = $a;});
  return preg_replace('/\(\w\) /','', $return['value']);
},$array['relationship_list']);

/*get employees details*/
$array = array_column($array['entry_list'],'name_value_list');

$headers = array_map('strtoupper',array_merge(array_keys($array[0]),['company']));

$out = fopen('file.csv','w');
fputcsv($out,$headers);

foreach($array as $key => $info){
  fputcsv($out, array_merge(array_column($info,'value'),[$companies[$key]]));
}
fclose($out);
0 голосов
/ 05 февраля 2019

Не так сложно:

<?php

$json = '....';
$data = json_decode($json);

# print_r($data); #de-comment to debug

# print title
fputcsv(STDOUT,array("ID","NAME","PHONE_WORK","PHONE_MOBILE","COMPANY"));

foreach ( $data->entry_list as &$rec )
{
    $val = &$rec->name_value_list;
    fputcsv(STDOUT,array( $val->id->value,
                          $val->name->value,
                          $val->phone_work->value,
                          $val->phone_mobile->value ));
    # no data available for COMPANY!
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...