За последние 24 часа нас посетили 22497 программистов и 1001 робот. Сейчас ищут 776 программистов ...

Простой вопрос по JSON

Тема в разделе "Сделайте за меня", создана пользователем andre2017, 4 янв 2020.

  1. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2
    Помогите разобраться или сделайте за меня. Оплачу на карту.
    Был рабочий код:

    $params["string"] = $INN;
    $url = "https://zachestnyibiznesapi.ru/v2/data/search?page=1&_format=json";
    $params["api_key"] = "ххх";
    $params["ip_client"] = $_SERVER["REMOTE_ADDR"];
    $opts = array("http" => array("method"=>"POST",
    "header" => "Content-type: application/x-www-form-urlencoded",
    "content"=>http_build_query($params),"ignore_errors" => true));
    $json = file_get_contents($url, false, stream_context_create($opts)); // Запрос к сайту
    //var_dump($json);
    $data = json_decode($json);

    foreach($data->docs as $v){
    if($v->{'Активность'}=='Действующее'){
    $_SESSION['spisok'] = $json;
    $_SESSION['OGRN'] = $v->id;
    $_SESSION['name'] = $v->{'НаимЮЛСокр'};
    $_SESSION['chief'] = $v->{'Руководитель'};
    $_SESSION['status'] = $v->{'Активность'};
    $result = 0;
    return $result;
    }
    }

    И приходил такой ответ с сайта:
    {"total":3,"docs":[
    {"id":"1027700070518","ТипДокумента":"ul","НаимЮЛСокр":"ПАО \"ГАЗПРОМ\"","НаимЮЛПолн":"ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО \"ГАЗПРОМ\"","Активность":"Действующее","ИНН":"7736050003","КПП":"772801001","ОбрДата":"25.02.1993","Адрес":"117420, г Москва, улица Намёткина, дом 16","КодОКВЭД":"46.71","НаимОКВЭД":"Торговля оптовая твердым, жидким и газообразным топливом и подобными продуктами","Руководитель":["Миллер Алексей Борисович"]},
    {"id":"1027700070518","ТипДокумента":"ul","НаимЮЛСокр":"ПАО \"ГАЗПРОМ\"","НаимЮЛПолн":"ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО \"ГАЗПРОМ\"","Активность":"Действующее","ИНН":"7736050003","КПП":"772801001","ОбрДата":"25.02.1993","Адрес":"117420, г Москва, улица Намёткина, дом 16","КодОКВЭД":"46.71","НаимОКВЭД":"Торговля оптовая твердым, жидким и газообразным топливом и подобными продуктами","Руководитель":["Миллер Алексей Борисович", "Иванов Иван Иванович"]},
    {"id":"1061515009555","ТипДокумента":"ul","НаимЮЛСокр":null,"НаимЮЛПолн":"ГАЗПРОМ ОАО","Активность":"Ликвидировано","ИНН":"7736050003","КПП":"151541001","ОбрДата":"02.06.2002","Адрес":"респ Северная Осетия - Алания, город Владикавказ","КодОКВЭД":null,"НаимОКВЭД":null,"Руководитель":null}
    ]}

    Версия АПИ изменилась и все перестало работать.Вижу, что добавились поля status и message в начале:

    string(1231) "{"status":"200","message":"Запрос выполнен успешно","body":{"total":2,"docs":[{"id":"1027700070518","ТипДокумента":"ul","НаимЮЛСокр":"ПАО \"ГАЗПРОМ\"","НаимЮЛПолн":"ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО \"ГАЗПРОМ\"","Активность":"Действующее","ИНН":"7736050003","КПП":"772801001","ОбрДата":"25.02.1993","Адрес":"117420, г Москва, улица Намёткина, дом 16","КодОКВЭД":"46.71","НаимОКВЭД":"торговля оптовая твердым, жидким и газообразным топливом и подобными продуктами","Руководитель":["Миллер Алексей Борисович"]},{"id":"1061515009555","ТипДокумента":"ul","НаимЮЛСокр":null,"НаимЮЛПолн":"ГАЗПРОМ ОАО","Активность":"Ликвидировано","ИНН":"7736050003","КПП":"151541001","ОбрДата":"02.06.2002","Адрес":"респ Северная Осетия - Алания, город Владикавказ","КодОКВЭД":null,"НаимОКВЭД":"","Руководитель":[null]}]}}"

    Помогите:
    1. отсечь эти поля, чтобы просто все заработало.
    2. (позже) использовать эти поля, чтобы упростилась программа.
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    PHP:
    1. foreach($data->docs as $v)
    Замени на
    PHP:
    1. foreach($data->body->docs as $v)
     
    andre2017 и Roman __construct нравится это.
  3. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2
    Cпасибо за быстрый ответ! Сразу помогло, пошли отчеты:

    {"status":"200","message":"Запрос выполнен успешно","body":{"Бухгалтерский баланс":{"Актив":{"I. ВНЕОБОРОТНЫЕ АКТИВЫ":{"Нематериальные актив

    Но появились другие ошибки,

    $data = json_decode($JSON);
    $bbalans = "Бухгалтерский баланс";
    $activ = "Актив";
    $ACTIV = $data->$bbalans->$activ;
    $passiv = "Пассив";
    $PASSIV = $data->$bbalans->$passiv;

    Здесь тоже нужно вставить тело body? таких строк сотня...

    видимо всю программу нужно переделывать теперь. Кто хочет помочь? Сколько будет стоить?
     
    #3 andre2017, 4 янв 2020
    Последнее редактирование: 5 янв 2020
  4. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    А сколько есть? :D
     
  5. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2

    Отчеты идут тоже с дополнительными полями:

    {"status":"200","message":"Запрос выполнен успешно","body":{"Бухгалтерский баланс":{"Актив":{"I. ВНЕОБОРОТНЫЕ АКТИВЫ":{"Нематериальные активы...

    Подскажите пожалуйста, как исправить следующий кусок кода?
    $data = json_decode($JSON);
    $bbalans = "Бухгалтерский баланс";
    $activ = "Актив";
    $ACTIV = $data->$bbalans->$activ;
    $passiv = "Пассив";
    $PASSIV = $data->$bbalans->$passiv;
    $VNEOB = "I. ВНЕОБОРОТНЫЕ АКТИВЫ";
    $nemat = "Нематериальные активы";
    foreach ($ACTIV->$VNEOB->$nemat as $Year=>$Summa){$A[$Year][1110]=$Summa;}; - Invalid argument supplied for foreach()

    Я так понимаю, что следуя Вашему совету, нужно скорректировать эти строки:
    $ACTIV = $data->$bbalans->$activ;
    $PASSIV = $data->$bbalans->$passiv;
    Или источник данных:
    $data = json_decode($JSON);
    Но как туда вставить body-> ?
     
  6. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2
    я так исправил:
    $data_ = json_decode($JSON);
    $data = $data_->body;
    Количество ошибок уменьшилось!
     
    Roman __construct нравится это.
  7. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Ну так что если структура изменилась, надо под новую структуру заточить...
    По стоимости думаю пару тысяч
     
  8. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2
    Вопрос закрыт, тема закрыта. Всем спасибо! По поводу переделки программы создам новую тему, когда напишу ТЗ.