2016-08-19 61 views
1

我有一個JSON文件,每行都有一個不同的JSON響應。我希望每一行檢索相同的數據(摘要)。逐行檢索JSON數據行JSON文件

我的文件的結構類似:

{"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"," 

我的代碼:

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

echo $name; 
} 

我有一個錯誤在此代碼的foreach()。

+0

add'$ json = json_decode($ json,true)' – 0x13a

+0

錯誤是什麼? – RomanPerekhrest

+0

錯誤是「爲foreach()提供的無效參數」 – Rayan958

回答

0

file_get_contents返回一個字符串 - 所以你需要先解碼它,然後試圖遍歷它。部分所包含的內容是數組 - 一個遞歸迭代器會更好/比下面更清潔或許

$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 />'; 
     } 
    } 
} 

去過忙了一整天,但在此再次看了看剛纔,認爲使用array_walk_recursive就會簡單得多。

$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

感謝您的迴應,但我有同樣的錯誤「爲foreach()提供的無效參數」 – Rayan958

+1

問題中的數據過早終止 - 如果實際數據共享此故障,那麼這將解釋爲什麼它沒有被正確解析。 – RamRaider

0

嘗試是這樣的:

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

    fclose($fileHandle); 
} 

使用var_dump看你$data對象是什麼樣子,它已經通過json_decode()解碼後。

這將逐行讀取文件,每行分別讀取json_decode。您提供的代碼片段不完整或無效json