Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: json и php

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: некоректно отображается json ответ
myspase
Отправлено: 13 Февраля, 2017 - 23:48:15
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2017  


Помог: 0 раз(а)




Всем привет,
получаю JSON ответ от сервера,обработав ответ в браузере выводится текст без переноса строки с тегами <br/> в виде текста,пример ниже

google.com<br/>Registry Domain ID: 2138514_DOMAIN_COM-VRSN< br/>Registrar WHOIS Server: whois.markmonitor.com< br/>Registrar URL: markmonitor.com<; br/>Updated Date: 2015-06-12T10:38:52-0700< br/>

было решено воспользоватся функцией preg_replace где заменил <br/> на тот же <br/>
перенос удалось получить, но в конце и начале подстроки остались угловые скобки

Domain Name: google.com<
>Registry Domain ID: 2138514_DOMAIN_COM-VRSN<
>Registrar WHOIS Server: whois.markmonitor.com<
>Registrar URL: http://www.markmonitor.com<
>Updated Date: 2015-06-12T10:38:52-0700<
>Creation Date: 1997-09-15T00:00:00-0700<
>Registrar Registration Expiration Date: 2020-09-13T21:00:00-0700<
>Registrar: MarkMonitor, Inc.<
>Registrar IANA ID: 292<

последующие манипуляции со str_replace или preg_replace ничего не дали, скобки либо не заменяются либо просто белая страница отображается, мой код
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. $content = file_get_contents('https://www.domaintally.com/api/v1/whois?access_token=bfb4f4f431f1f366fcff9b30b78fe5d67ee20e97&domain=google.com');
  4. $JSON = json_decode($content);
  5. $updated = $JSON->data->{'google.com'}->full_whois;
  6. $asd =  preg_replace('<br/>','<br/>',"$updated");
  7. echo $asd;
  8. ?>

в чем может быть причина?
 
 Top
teleoperator27
Отправлено: 14 Февраля, 2017 - 03:26:11
Post Id



Посетитель


Покинул форум
Сообщений всего: 265
Дата рег-ции: Янв. 2017  


Помог: 21 раз(а)




А ты бы исходный код страницы глянул, сразу стало ясно в чем проблема.

PHP:
скопировать код в буфер обмена
  1.  
  2. $content = file_get_contents('https://www.domaintally.com/api/v1/whois?access_token=bfb4f4f431f1f366fcff9b30b78fe5d67ee20e97&domain=google.com');
  3. $JSON= json_decode($content);
  4. $updated = htmlspecialchars_decode($JSON->data->{'google.com'}->full_whois);
  5. echo $updated;
  6.  
 
My status
 Top
myspase
Отправлено: 14 Февраля, 2017 - 13:05:34
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2017  


Помог: 0 раз(а)




Спасибо, получилось,но теперь есть другая проблема в обьектах dns_records и domain_status
кажется json_decode не декодировал их и вывод получается неправильный, пробовал решить проблему таким образом

PHP:
скопировать код в буфер обмена
  1. $domain_status = $JSON->data->{'google.com'}->domain_status;
  2. $domain_status = html_entity_decode($domain_status);
  3. $domain_status = stripslashes($domain_status);
  4. echo $domain_status;

но ничего не вышло, ниже примеры вывода
domain_status:
["clientDeleteProhibited https://icann[dot]org
/epp#clientDeleteProhibited","clientTransferProhibited https://icann[dot]org/epp#clientTran[dot][dot][dot]UpdateProhibited https://icann[dot]org
/epp#clientUpdateProhibited","serverDeleteProhibited https://icann[dot]org
/epp#serverDeleteProhibited","serverTransferProhibited https://icann[dot]org/epp#serverTran[dot][dot][dot]UpdateProhibited https://icann.org/epp#serverUpdateProhibited"]

dns_records:
[{"host":"google.com","class":"IN","ttl":"227","type":"A","ip":"172.217.22.14"},{"host":"google.com","class":"IN","ttl":"53759","type":"NS","target":"ns3.google.com"},{"host":"google.com","class":"IN","ttl":"53759","type":"NS","target":"ns2.google.com"},{"host":"google.com","class":"IN","ttl":"53759","type":"NS","target":"ns4.google.com"},{"host":"google.com","class":"IN","ttl":"53759","type":"NS","target":"ns1.google.com"},

может,нужно иначе выводить эти обьекты?
 
 Top
teleoperator27
Отправлено: 14 Февраля, 2017 - 14:40:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 265
Дата рег-ции: Янв. 2017  


Помог: 21 раз(а)




полагаю, его тоже надо разобрать


PHP:
скопировать код в буфер обмена
  1.  
  2. $json= json_decode($content);
  3. //$updated = htmlspecialchars_decode($json->data->{'google.com'}->full_whois);
  4. $dns_records = json_decode($json->data->{'google.com'}->dns_records);
  5.  
  6. echo '<pre>';
  7. print_r($dns_records);
  8. echo '</pre>';
  9.  
 
My status
 Top
myspase
Отправлено: 14 Февраля, 2017 - 16:19:11
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2017  


Помог: 0 раз(а)




а как быть если в dns_records и domain_status может содержатся информация допустим с другого ресурса(к примеру ok.ru),тогда вывод типа
PHP:
скопировать код в буфер обмена
  1. $dns_records = json_decode($json->data->{'google.com'}->dns_records->0->hots);

не получится как как для разных запросов будет возвращатся разное количество данных
к примеру
domain_status google.com (кстати почему вернулся ассоциативный массив вместо std object? json_decode без параметра true)
Спойлер (Отобразить)

domain_status ok.ru
Спойлер (Отобразить)

dns_records google.com (возвращает std object)
Спойлер (Отобразить)

dns_records ok.ru
Спойлер (Отобразить)

как же все-таки отображать эту информацию в корректном виде?(в случае как c full_whois)
 
 Top
teleoperator27
Отправлено: 14 Февраля, 2017 - 16:20:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 265
Дата рег-ции: Янв. 2017  


Помог: 21 раз(а)




ну а если домен еще до запроса урла в переменную загнать и ее подставлять в процессе?
(Добавление)
ну, не прокатит наверное
(Добавление)
Я, может, не так понял понял проблему, но все нормально выводится


PHP:
скопировать код в буфер обмена
  1.  
  2. $url     = "ok.ru";
  3. $content = file_get_contents('https://www.domaintally.com/api/v1/whois?access_token=bfb4f4f431f1f366fcff9b30b78fe5d67ee20e97&domain='.$url);
  4. $json    = json_decode($content);
  5.  
  6. echo '<pre>';
  7. print_r($json);
  8. echo '</pre>';
  9. echo "<hr>";
  10.  
  11. $updated = htmlspecialchars_decode($json->data->{$url}->full_whois);
  12.  
  13. echo '<pre>';
  14. print_r($updated);
  15. echo '</pre>';
  16. echo "<hr>";
  17.  
  18. $dns_records = json_decode($json->data->{$url}->dns_records);
  19.  
  20. echo '<pre>';
  21. print_r($dns_records);
  22. echo '</pre>';
  23.  
 
My status
 Top
myspase
Отправлено: 14 Февраля, 2017 - 17:05:28
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2017  


Помог: 0 раз(а)




Я скорее всего неправильно выразился, с самим выводом уже проблем нет, допустим я хочу прикрутить кнопку на сайте, которая будет передавать в GET сам url и будет выводится информация о домене, под удобочитаемым видом я имел ввиду отображение вывода на старнице без скобок,надписей Array и тд
например вот так

host: ok.ru
class: IN
ttl: 85
type: A
ip: 217.20.147.94

а не вот так

Array
(
[0] => stdClass Object
(
[host] => ok.ru
[class] => IN
[ttl] => 85
[type] => A
[ip] => 217.20.147.94
)

я понимаю, что можно вывести элемент обьекта(допустим [host]) таким образом
PHP:
скопировать код в буфер обмена
  1.   json_decode($json->data->{$url}->dns_records->0->host)

и как по всем интересующим меня пунктам,но это будет работать только для одного конкретного сайта, так как для google эти записи в обьекте будут отличаться и они просто не выведутся или приведут к ошибке
 
 Top
teleoperator27
Отправлено: 14 Февраля, 2017 - 17:09:21
Post Id



Посетитель


Покинул форум
Сообщений всего: 265
Дата рег-ции: Янв. 2017  


Помог: 21 раз(а)




не приведут они ни к какой ошибке. Вернется или строка или массив, сделал проверку, если массив, то возвращаешь его, например, через foreach, а если строка, то так отдаешь.
 
My status
 Top
myspase
Отправлено: 14 Февраля, 2017 - 17:26:59
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2017  


Помог: 0 раз(а)




Я прощу прощения,но я не совсем понял, при помощи gettype проверяем строка или массив, а потом если использовать foreach то print_r выведет что-то типа этого
Array
(
[host] => ok.ru
[class] => IN
[ttl] => 85
[type] => A
[ip] => 217.20.147.94
)
может у вас пример кода завалялся?
 
 Top
teleoperator27
Отправлено: 14 Февраля, 2017 - 17:49:46
Post Id



Посетитель


Покинул форум
Сообщений всего: 265
Дата рег-ции: Янв. 2017  


Помог: 21 раз(а)




print_r не для того, что бы выводить информацию на сайт, а для отладки. Что бы разработчик мог посмотреть, "что внутри". А foreach он и в африке foreach


PHP:
скопировать код в буфер обмена
  1. $url     = "ok.ru";
  2.  
  3. $content = file_get_contents('https://www.domaintally.com/api/v1/whois?access_token=bfb4f4f431f1f366fcff9b30b78fe5d67ee20e97&domain='.$url);
  4.  
  5. $json    = json_decode($content);
  6.  
  7. $updated = htmlspecialchars_decode($json->data->{$url}->full_whois);
  8.  
  9. $dns_records = json_decode($json->data->{$url}->dns_records);
  10.  
  11. foreach($dns_records as $key=>$value){
  12.  
  13.         echo   '<hr>';
  14.  
  15.         foreach($value as $k=>$v){
  16.  
  17.                 echo $k . ' = ' . $v . '<br>';
  18.  
  19.         }
  20. }


hr и br я для наглядности вставил
 
My status
 Top
myspase
Отправлено: 14 Февраля, 2017 - 18:10:25
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2017  


Помог: 0 раз(а)




Благодарю,это именно то что я хотел узнать
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB