парсинг json из веб-сервиса

Я пытаюсь проанализировать большой объем данных JSON, сгенерированных из удаленного веб-сервиса. Полученный вывод разбит на страницы по 500 URI, и каждый URI содержит 100 объектов JSON. Мне нужно сопоставить свойство в каждом объекте JSON, это DOI (идентификатор цифрового объекта), с соответствующим полем, полученным из локальной базы данных, а затем обновить запись.

Проблема, с которой я сталкиваюсь, заключается в том, что я контролирую свои циклические конструкции для поиска подходящего JSON DOI, одновременно следя за тем, чтобы все данные были проанализированы.

Как вы можете видеть, я пытался использовать комбинацию операторов break и continue, но я не могу «выйти» за пределы первого URI.

Позже я ввел переменную flag, чтобы помочь контролировать циклы без эффекта.

 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) {
}
}
}
}

}
Каков оптимальный подход, который гарантирует, что каждый объект JSON на всех URI анализируется, и что операции CRUD выполняются только в моей базе данных, когда поле DOI извлеченной записи соответствует свойству DOI входящих данных JSON?

0

Решение

Я не уверен на 100%, что понимаю все аспекты вашего вопроса, но для меня имеет смысл изменить порядок исполнения.

  • получить страницу из внешнего сервиса
    • декодировать JSON и перебрать все 100 объектов
      • получить один DOI
      • получить соответствующую запись из базы данных
      • изменить запись в БД
    • когда все json-объекты прогрессируют — выбирают следующий URL
  • повторять до тех пор, пока не будут получены все 100 URL

Я думаю, что это не очень хорошая идея, чтобы извлечь одну запись из локальной БД и попытаться найти ее в 100 различных удаленных вызовах — вместо этого лучше основывать свой рабочий процесс / циклы на извлеченных удаленных данных и пытаться найти соответствующие элементы в вашей локальной БД

Если вы думаете, что такой подход подойдет вашей задаче — я, конечно, могу помочь вам с кодом 🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]