За последние 24 часа нас посетили 18606 программистов и 1702 робота. Сейчас ищут 860 программистов ...

Как работать с json ?

Тема в разделе "PHP для новичков", создана пользователем AnteFil, 9 дек 2014.

  1. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Не работал я раньше с json помогите! Мануал я почитал теперь есть ряд мыслей и сомнений поправте меня если я ошибаюсь и ответе на вопросы.
    Я отправляю запрос приблизительно так
    Код (PHP):
    1. $url = 'https://dictionary.yandex.net/api/v1/dicservice.json/lookup?key=ключ&lang=ru-ru&text=вечность'; 
    Затем забираю данные так
    Код (PHP):
    1. $body = file_get_contents($url); 
    делаю массив
    Код (PHP):
    1. $json = json_decode($body); 
    Проверяю выводя на печать
    Получааеться вот это
    Код (PHP):
    1. object(stdClass)#1 (2) { ["head"]=> object(stdClass)#2 (0) { } ["def"]=> array(1) { [0]=> object(stdClass)#3 (3) { ["text"]=> string(16) "вечность" ["pos"]=> string(30) "существительное" ["tr"]=> array(9) { [0]=> object(stdClass)#4 (3) { ["text"]=> string(27) "целая вечность" ["pos"]=> string(30) "существительное" ["syn"]=> array(1) { [0]=> object(stdClass)#5 (2) { ["text"]=> string(8) "веки" ["pos"]=> string(30) "существительное" } } } [1]=> object(stdClass)#6 (3) { ["text"]=> string(12) "вечный" ["pos"]=> string(28) "прилагательное" ["syn"]=> array(4) { [0]=> object(stdClass)#7 (2) { ["text"]=> string(20) "предвечный" ["pos"]=> string(28) "прилагательное" } [1]=> object(stdClass)#8 (2) { ["text"]=> string(16) "извечный" ["pos"]=> string(28) "прилагательное" } [2]=> object(stdClass)#9 (2) { ["text"]=> string(20) "вековечный" ["pos"]=> string(28) "прилагательное" } [3]=> object(stdClass)#10 (2) { ["text"]=> string(24) "непреходящий" ["pos"]=> string(28) "прилагательное" } } } [2]=> object(stdClass)#11 (3) { ["text"]=> string(14) "навечно" ["pos"]=> string(14) "наречие" ["syn"]=> array(3) { [0]=> object(stdClass)#12 (2) { ["text"]=> string(12) "навеки" ["pos"]=> string(14) "наречие" } [1]=> object(stdClass)#13 (2) { ["text"]=> string(10) "вечно" ["pos"]=> string(14) "наречие" } [2]=> object(stdClass)#14 (2) { ["text"]=> string(20) "бесконечно" ["pos"]=> string(14) "наречие" } } } [3]=> object(stdClass)#15 (2) { ["text"]=> string(26) "бесконечность" ["pos"]=> string(30) "существительное" } [4]=> object(stdClass)#16 (2) { ["text"]=> string(20) "бессмертие" ["pos"]=> string(30) "существительное" } [5]=> object(stdClass)#17 (2) { ["text"]=> string(6) "эон" ["pos"]=> string(30) "существительное" } [6]=> object(stdClass)#18 (2) { ["text"]=> string(6) "эра" ["pos"]=> string(30) "существительное" } [7]=> object(stdClass)#19 (2) { ["text"]=> string(22) "бессмертный" ["pos"]=> string(28) "прилагательное" } [8]=> object(stdClass)#20 (2) { ["text"]=> string(22) "бесконечный" ["pos"]=> string(28) "прилагательное" } } } } } Скрипт выполнялся 0.2004 сек. 
    Вопрос как теперь с этим работать например взять все
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    я присваиваю значение "строка" переменной урл
    делаю не массив а объект. массив делается другим образом - мануал подскажет как.
    ну с объектом новичку не будет удобно работать. лучше с массивом.
     
  3. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Как обратиться к "text" и "pos" ?
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    в массиве или в объекте?
     
  5. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Смотря как лучше! Кстати я тут посмотрел а нужно ли вообще использовать json_decode при работе с json.
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а что ты знаешь? судя по всему еще ни с тем ни с другим особо не работал
    и каков ответ?
     
  7. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    так я и спрашиваю надо ли эту функцию использовать или нет?
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а как ты еще декодировать json собрался?
     
  9. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    )))))) Ладно так как обратиться к элементу(там) в объекте json ?

    Добавлено спустя 3 минуты 34 секунды:
    Всё спасибо разобрался !!!!
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    в пхп? чувак, ты пропустил почитать 99% мануала. json это нотация записи объектов в javascript. чтоб работать с ней в пыхе надо декодировать строку. декодировать можно опять же в объект, если ты уже прошел такую стадию дзен как ООП (объектно ориентированное программирование) или в массив, если ты прошел такую мелочь как типы данных в пхп. и как ты можешь догадаться интерфейс работы с объектом и с массивом разный потому что объект и массив разные вещи.
    тебя изначально до усрачки перепугал вывод объекта декодированного джейсона. ну дык тебе сразу сказали что с ооп ты не знаком раз не знаешь с какой стороны к объекту подходить. и предложили декодировать в массив. это ты как бы уже обязан был изучить. и вместо того чтоб пойти поглянуть в мануале как декодировать не в объект а в массив ты задумался на кой хер вообще декодировать джейсон. совсем не в ту сторону. совсем. впрочем раз ты пропустил 99% обучения то тебе это стало быть привычно. май вэй так сказать. ну то есть йор вэй, да.
    ну ты уже посмотришь в нужную сторону?))))
     
  11. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    А не не разобрался ((((( массив я создал а вот как теперь обратиться не получается
    Код (PHP):
    1. $outmsv = json_decode($body, true);// Создал так 
    2. //ПЫтаюсь так обратиться к элементу
    3. echo $outmsv['text'];
    4.  
    Не получаеться
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    В документации описаны почти все варианты как работать с массивом php.net/manual/ru/language.types.array.php
    Смотри более внимательно: Пример #6 Доступ к элементам массива
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    чего тут разбираться, ну дока по функции же три предложения ж...

    Добавлено спустя 46 секунд:
    var_dump()
     
  14. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    var_dump($outmsv['text']);
    В итоге NULL
     
  15. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вардамп результата декодирования для начала, блин. тебя еще и отладки учить? бросай ты это дело. не программист ты по природе)))
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Заповедь 47-ая - Учи, а не отучай.
     
  17. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    де ознакомиться с полным списком?
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Пока есть только сорокседьмая вот.
     
  19. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Почему не получается обратиться к элементу? Может из-за многомерности?
     
  20. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Да, массив многомерный.
    Прочитай ещё раз моё первое сообщение, чтобы понять как обращаться к многомерным массивам.

    Чтобы понять структуру массива, можно вывести его на экран:
    Код (PHP):
    1. echo '<pre>';
    2. var_dump($outmsv);
     
  21. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Спасибо echo '<pre>'; очень помогло понять
     
  22. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    это он не тебе вообще писал. ты такой внимательный)))) хотя я понимаю, у тебя сейчас лютейшая каша в голове потому что ты не знаешь ни массивов ни объектов да еще и оказалось что жейсон это джавастрипт нотация. "при чем тут вообще пхп?" возможно крутится в твоей голове))))

    короче говоря. ты ознакомься с основами. грубо говоря есть карта по которой "поверни туда пройди прямо поверни сюда" можно добраться из точки А в точку Б. но тебя высадило в точку Х и тебе эта карта - только разве что подтереться ибо иначе ты не можешь её применять. вот ты сейчас в таком положении. ты нашел как декодируют джейсон, нашел как скачать урл. всё ок. но ты как оказалось не умеешь читать мануал. и не умеешь смотреть состояние своего кода. пока ты басису не научишься - у тебя будут вот такие веселые треды возникать на форумах.