我正在尝试解析从远程 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 操作的最佳方法是什么?