簡體   English   中英

從Web服務解析分頁json

[英]parsing paginated json from web service

我正在嘗試分析從遠程Web服務生成的大量JSON數據。 產生的輸出在500個URI中分頁,每個URI包含100個JSON對象。 我需要將每個JSON對象中的屬性(即DOI(數字對象標識符))與從本地數據庫中獲取的相應字段進行匹配,然后更新記錄。

我遇到的問題是控制我的循環結構以查找匹配的JSON DOI,同時確保已解析所有數據。

如您所見,我嘗試使用break和continue語句的組合,但是我無法“移動”超出第一個URI。

后來我引入了一個標志變量來幫助控制循環而沒有效果。

 while($obj = $result->fetch_object()){       
       for($i=1;$i<=$outputs_json['meta']['response']['total-pages'];$i++){ 
         $url = 'xxxxxxxxxxxxxxx&page%5Bnumber%5D='."$i".'&page%5Bsize%5D=100';
         if($outputs = json_decode(file_get_contents($url),true)===false){
         }
         else{   
            try{
                $outputs = json_decode(file_get_contents($url),true); 
                $j=0;                   
                do{
                    $flag = false;
                    $doi = trim($outputs['data'][$j]['attributes']['identifiers']['dois'][0], '"');
                    if(!utf8_encode($obj->doi)===$doi) continue;                           
                    }else{
                        $flag = true;                   
                        $j++;
                    }
                }while($j!==101);
                  if($flag===true) break;
               } catch(Exception $e) {
            }       
        }   
    }
}

}確保在所有URI處解析每個JSON對象並且僅當獲取的記錄的DOI字段與傳入JSON數據的DOI屬性匹配時才對數據庫執行CRUD操作的最佳方法是什么?

我不是100%肯定我了解您問題的各個方面,但對我而言,更改執行順序是有意義的

  • 從外部服務獲取頁面
    • 解碼json並遍歷所有100個對象
      • 得到一個DOI
      • 從數據庫中獲取相應的記錄
      • 更改數據庫記錄
    • 當所有json對象都進行時-獲取下一個URL
  • 重復直到獲取所有100個網址

我認為從本地數據庫中獲取一條記錄並嘗試在100個不同的遠程調用中找到它不是一個好主意-相反,最好將工作流/循環基於獲取的遠程數據,並嘗試在本地數據庫中找到相應的元素

如果您認為該方法適合您的任務,那么我當然可以為您提供代碼:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM