2016-08-19 3 views
1

Ich habe eine JSON-Datei mit jeder JSON-Antwort für jede Zeile. Ich möchte für jede Zeile die gleichen Daten abrufen (Zusammenfassung).Abrufen von JSON-Daten Zeile für Zeile JSON-Datei

Meine Datei ist so strukturiert:

{"expand":"renderedFields,names,schema,transitions,operations,editmeta,changelog","id":"11246","self":"http://api-factory.orange-labs.fr:8080/rest/api/latest/issue/11246","key":"TK-44","fields":{"issuetype":{"self":"http://api-factory.orange-labs.fr:8080/rest/api/2/issuetype/3","id":"3","description":"A task that needs to be done.","iconUrl":"http://api-factory.orange-labs.fr:8080/images/icons/issuetypes/task.png","name":"Task","subtask":false},"timespent":null,"project":{"self":"http://api-factory.orange-labs.fr:8080/rest/api/2/project/10300","id":"10300","key":"TK","name":"TEST KANBAN","avatarUrls":{"48x48":"http://api-factory.orange-labs.fr:8080/secure/projectavatar?avatarId=10011","24x24":"http://api-factory.orange-labs.fr:8080/secure/projectavatar?size=small&avatarId=10011","16x16":"http://api-factory.orange-labs.fr:8080/secure/projectavatar?size=xsmall&avatarId=10011","32x32":"http://api-factory.orange-labs.fr:8080/secure/projectavatar?size=medium&avatarId=10011"}},"fixVersions":[],"aggregatetimespent":null,"resolution":null,"resolutiondate":null,"workratio":-1,"lastViewed":null,"watches":{"self":"http://api-factory.orange-labs.fr:8080/rest/api/2/issue/TK-44/watchers","watchCount":1,"isWatching":true},"created":"2016-08-17T11:33:16.000+0200","priority":{"self":"http://api-factory.orange-labs.fr:8080/rest/api/2/priority/3","iconUrl":"http://api-factory.orange-labs.fr:8080/images/icons/priorities/medium.png","name":"Medium","id":"3"},"customfield_10100":null,"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"updated":"2016-08-17T16:32:33.000+0200","status":{"self":"http://api-factory.orange-labs.fr:8080/rest/api/2/status/10403","description":"This status is managed internally by JIRA Agile","iconUrl":"http://api-factory.orange-labs.fr:8080/images/icons/subtask.gif","name":"Opportunities","id":"10403","statusCategory":{"self":"http://api-factory.orange-labs.fr:8080/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To Do"}},"components":[],"timeoriginalestimate":null,"description":null,"customfield_10210":null,"customfield_10211":{"self":"http://api-factory.orange-labs.fr:8080/rest/api/2/customFieldOption/10125","value":"API lead","id":"10125"},"customfield_10212":null,"timetracking":{},"customfield_10203":null,"customfield_10006":null,"customfield_10204":null,"customfield_10205":null,"customfield_10206":{"self":"http://api-factory.orange-labs.fr:8080/rest/api/2/customFieldOption/10103","value":"B. Mignot","id":"10103"},"attachment":[],"customfield_10009":"0|i0018n:","customfield_10207":{"self":"http://api-factory.orange-labs.fr:8080/rest/api/2/customFieldOption/10109","value":"P. Metton","id":"10109"},"aggregatetimeestimate":null,"customfield_10208":{"self":"http://api-factory.orange-labs.fr:8080/rest/api/2/customFieldOption/10122","value":"not assigned","id":"10122"},"customfield_10209":null,"summary":"API Orange Wholesale FR","creator":{"self":"http://api-factory.orange-labs.fr:8080/rest/api/2/user?username=AGRO","name":"AGRO","key":"agro","emailAddress":"[email protected]","avatarUrls":{"48x48":"http://api-factory.orange-labs.fr:8080/secure/useravatar?avatarId=10122","24x24":"http://api-factory.orange-labs.fr:8080/secure/useravatar?size=small&avatarId=10122","16x16":"http://api-factory.orange-labs.fr:8080/secure/useravatar?size=xsmall&avatarId=10122","32x32":"http://api-factory.orange-labs.fr:8080/secure/useravatar?size=medium&avatarId=10122"},"displayName":"ROBERTO AGRO","active":true,"timeZone":"Europe/Paris"},"subtasks":[],"reporter":{"self":"http://api-factory.orange-labs.fr:8080/rest/api/2/user?username=AGRO","name":"AGRO","key":"agro","emailAddress":"[email protected]","avatarUrls":{"48x48":"http://api-factory.orange-labs.fr:8080/secure/useravatar?avatarId=10122","24x24":"http://api-factory.orange-labs.fr:8080/secure/useravatar?size=small&avatarId=10122","16x16":"http://api-factory.orange-labs.fr:8080/secure/useravatar?size=xsmall&avatarId=10122","32x32":"http://api-factory.orange-labs.fr:8080/secure/useravatar?size=medium&avatarId=10122"},"displayName":"ROBERTO AGRO","active":true,"timeZone":"Europe/Paris"},"customfield_10000":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10001":null,"customfield_10200":null,"customfield_10201":null,"customfield_10004":null,"customfield_10202":null,"environment":null,"duedate":null,"progress":{"progress":0,"total":0},"comment":{"startAt":0,"maxResults":0,"total":0,"comments":[]},"votes":{"self":"http://api-factory.orange-labs.fr:8080/rest/api/2/issue/TK-44/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]}}} 
{"expand":"renderedFields,names,schema,transitions,operations,editmeta,changelog","id":"11247"," 

Mein Code:

$json = file_get_contents("summary.json"); 
foreach ($json as $lineNumber => $lineContent) 
{ 
$parsed_json = json_decode($lineNumber); 
$name = $parsed_json->{'fields'}->{'summary'}; 

echo $name; 
} 

Ich habe einen Fehler mit dem foreach() in diesem Code.

+0

hinzufügen '$ json = json_decode ($ json, true)' – 0x13a

+0

Was ist der Fehler? – RomanPerekhrest

+0

der Fehler ist "ungültiges Argument für foreach()" – Rayan958

Antwort

0

file_get_contents gibt eine Zeichenfolge zurück - Sie müssen sie also vor dem Versuch, sie zu durchlaufen, dekodieren. Einige der enthaltenen Inhalte sind Arrays - eine rekursive Iterator wäre besser/sauberer als unten vielleicht

$data=file_get_contents('summary.json'); 
$json=json_decode($data,true); 
if(json_last_error() !== JSON_ERROR_NONE) exit('Invalid JSON data'); 

foreach($json as $i => $o){ 
    $keys=array_keys($o); 
    foreach($keys as $key) { 
     if(is_array($o[$key])){ 
      $a=$o[$key]; 
      foreach($a as $v)echo $v.'<br />'; 
     } else { 
      echo $key.' -> '.$o[$key].'<br />'; 
     } 
    } 
} 

den ganzen Tag damit beschäftigt gewesen, aber sah wieder auf das gerade jetzt und dachte, dass array_walk_recursive Verwendung wäre viel einfacher.

$json=json_decode(file_get_contents('summary.json'), true); 
if(json_last_error() !== JSON_ERROR_NONE) exit('Invalid JSON data'); 

function arrwalker($item,$key){/* simple callback */ 
    echo "<div><span class='bold'>$key</span> $item</div>"; 
} 

array_walk_recursive($json, 'arrwalker'); 
+0

Danke für Ihre Antwort, aber ich habe den gleichen Fehler "Ungültige Argument für foreach()" – Rayan958

+1

Die Daten in der Frage wird vorzeitig beendet - wenn die tatsächlichen Daten teilen diese Fehler dann würde erklären, warum es nicht richtig analysiert wird. – RamRaider

0

so etwas wie dieses Versuchen:

$fileHandle = fopen("summary.json", "r"); 
if ($fileHandle) { 
    while ($line = fgets($fileHandle) !== false) { 
     $data = json_decode($line); 
     $name = $data->summary; 
     //var_dump($data); 
    } 

    fclose($fileHandle); 
} 

Verwenden Sie die var_dump, um zu sehen, was Ihr $data Objekt aussieht, nachdem es durch json_decode() decodiert worden ist.

Dies liest die Datei Zeile für Zeile und json_decode jede Zeile einzeln. Das von Ihnen angegebene Snippet ist nicht vollständig oder nicht gültig json.