Отправка json. PHP и формат передачи данных JSON. Доставка JSON на сервер

Отправка json. PHP и формат передачи данных JSON. Доставка JSON на сервер

Москва, 5 июля - "Вести.Экономика". Эксперты ОЭСР представили исследование, в рамках которого были определены страны, работающие больше и меньше других. Наша страна вошла в пятерку самых работающих стран мира.

Ниже мы расскажем о том, в каких 10 странах работают больше всего.

10. Португалия

: 1863

Португалия замыкает десятку самых работящих стран. Здесь за год в среднем работники трудились 1863 часа.

Составители отчета отмечают, что в большинстве стран ОЭСР уровень занятости очень высок, он вернулся на докризисный уровень.

Несмотря на это, отмечают эксперты, рост зарплаты остается невысоким.

9. Латвия

Количество рабочих часов в год : 1875

Латвия занимает 9-е место в списке самых работящих стран: здесь в среднем работники трудились 1875 часов в год.

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

Помимо этого, они отмечают рост вынужденной частичной занятости в ряде стран.

8. Израиль

Количество рабочих часов в год : 1885

Израиль занимает 8-е место среди самых работящих стран. За 2017 г. в среднем работники трудились 1885 часов.

Составители отчета отмечают, что в некоторых странах рост средних зарплат существенно отстает от роста продуктивности труда.

7. Польша

Количество рабочих часов в год : 1895

Польша оказалась на 7-м месте по количество рабочих часов. Здесь в среднем работники трудились 1895 часов в год.

Эксперты отмечают, что технологический прогресс во многих отраслях, а также развитие глобальных цепочек поставок привело к тому, что единственный способ помочь работникам улучшить свое положение в сложившихся условиях – это повысить свои компетенции, полагают эксперты.

6. Чили

B]Количество рабочих часов в год: 1954

Чили занимает 6-е место среди самых работящих стран. Здесь за год работники трудились 1954 часа.

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

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

5. Россия

Количество рабочих часов в год : 1980

Россия второй год попадает в пятерку самых работающих стран: в 2017 г. среднее число отработанных россиянами часов выросло до 1980.

Это на шесть часов больше, чем в 2016 г. Россия обходит по этому показателю все страны "Большой семерки", включая США, Японию и Германию.

За отчетный год россияне отработали на 221 час больше, чем в среднем работники в странах ОЭСР (1759 часов).

4. Греция

Количество рабочих часов в год : 2018

Греция занимает 4-е место среди самых трудолюбивых стран: здесь работники в среднем трудились 2018 часов в год.

Составители отчета отмечают, что в связи с экономическими изменениями, которые происходят в ряде стран, работники ежегодно теряют рабочие места, что существенно снижает уровень их доходов.

Эксперты отмечают, что правительства стран должны озаботиться тем, чтобы обеспечить таких работников рабочими местами и возможностью для повышения своих квалификаций в соответствии с требованиями рынка.

3. Южная Корея

Количество рабочих часов в год : 2024

Южная Корея вошла в первую тройку самых трудолюбивых стран: здесь в среднем работники трудились 2024 часа в год.

Составители отчета отмечают, что финансовая поддержка незанятого населения, в частности тех, кто потерял работу (пособия по безработице), должна стать важной частью политики государств.

Тем не менее на сегодняшний день лишь один из трех безработных получает подобную поддержку со стороны государства.

2. Коста-Рика

Количество рабочих часов в год : 2179

Коста-Рика оказалась одной из самых работящих стран мира: здесь работники трудились 2179 часов в год.

Эксперты отмечают, что по-прежнему существует разница между годовым доходом мужчин и женщин.

Несмотря на то что разрыв в доходах снизился, женщины по-прежнему получают на 39% меньше, чем мужчины в 2015 г.

1. Мексика

Количество рабочих часов в год : 2257

Самыми работящими оказались мексиканцы: они в среднем трудились 2257 часов в год.

Отмечается, что на уровень дохода женщин оказывает влияние не только деторождение, но и то, что в начале карьеры женщинам доступно меньшее число профессий.

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

По разным оценкам, русскоязычная диаспора в мире насчитывает от 25 до 30 миллионов человек. Но точно подсчитать количество русских, проживающих в различных странах крайне сложно, поскольку неясно само определение «русский».

Когда мы говорим о русской диаспоре, то невольно возвращаемся к риторическому вопросу – кого считать русскими: или это исключительно россияне, или к ним присоединяются граждане бывших республик СССР, или в их число также входят потомки переселенцев из Российской империи?

Если к русским за рубежом причислять только выходцев из Российской Федерации, то вопросов возникнет не меньше, так как в их число попадут представители многочисленных национальностей, проживающих на территории России.

Используя термин «русский» как этноним мы сталкиваемся с одной стороны с проблемой национальной идентичности, а с другой – интеграции и ассимиляции. Скажем, сегодняшний потомок иммигрантов из Российской империи живущий во Франции может ощущать себя русским, а родившийся в семье переселенцев 1980-х годов, напротив, назовет себя полноценным французом.

Учитывая расплывчатость термина «русская диаспора» и еще не устоявшееся понятие «российская диаспора», часто употребляют другое словосочетание – «русскоязычная диаспора», куда включают тех, для кого русский язык является объединяющим началом. Впрочем, и здесь не обходится без спорных моментов. Например, по данным на 2008 год о своем русском происхождении заявили около 3 млн. жителей США, но при этом русский язык является родным лишь для 706 тыс. американцев.

Германия

Русскоязычная диаспора в Германии считается самой большой в Европе. Учитывая различные данные, в среднем она составляет 3,7 млн. человек, большая часть из которых – русские немцы. В семьях, прибывших в Германию 15-20 лет назад русский язык все еще является родным, хотя некоторые из иммигрантов используют помесь русского и немецкого языка, и лишь немногие свободно владеют немецким. Любопытно, что встречаются случаи, когда переселенцы уже начавшие использовать немецкий язык, вновь возвращаются к более привычной русской речи.
Сейчас уже в каждом крупном городе Германии открыты русские магазины, рестораны, бюро путешествий, есть даже русскоязычные адвокатские конторы и медицинские учреждения. Самые большие русские общины сосредоточены в Берлине, Гамбурге, Штутгарте, Дюссельдорфе и Франкфурте-на-Майне. Однако наибольшая концентрация русскоязычного населения в земле Баден-Вюртемберг.

Аргентина

Крупнейшая русская диаспора Южной Америки находится в Аргентине. По неофициальным данным ее количество достигает 300 тыс. человек, из них около 100 тыс. в той или иной степени владеют русским языком.
Историки насчитывают 5 волн эмиграции из России в Аргентину. Если первая была «еврейской», вторая – «немецкой», то последние три называют «русскими». Волны «русской эмиграции» совпали с переломными моментами истории России – революцией 1905 года, гражданской войной и перестройкой.
В начале XX столетия из России в Аргентину выехало много казаков и старообрядцев. Их компактные поселения существуют до сих пор. Большая колония старообрядцев находится в Чоэле-Чоэле. Сохраняя традиционный образ жизни, старообрядческие семьи по-прежнему имеют в среднем по 8 детей. Крупнейшая колония казаков находится в пригороде Буэнос-Айреса – Шварцбальде и состоит из двух поселений.
Русские аргентинцы бережно сохраняют культурную связь со своей исторической родиной. Так, в столице действует Институт Русской культуры. В Аргентине также работают радиостанции, передающие исключительно русскую музыку – Рахманинова, Чайковского, Прокофьева.

США

По оценкам экспертов русский язык занимает в Соединенных Штатах седьмое место по распространенности. Русскоязычное население росло в стране неравномерно: последняя и самая мощная волна эмиграции в США захлестнула республики СССР на рубеже 1980-90-х годов. Если в 1990 году американские власти насчитывали около 750 тыс. русских, то на сегодняшний день их число превышает 3 млн. человек. С 1990 года для граждан СССР была введена квота – не более 60 тыс. иммигрантов в год.
Нужно отметить, что В США «русскими» принято называть всех тех, кто приехал сюда из стран СНГ и имеющих различные этнические корни – русские, украинские, еврейские, казахские. Здесь как нигде проявляется двойственность ситуации, когда этническая идентификация и родной язык обозначают не одно и тоже.
Многочисленная русскоязычная диаспора находится в Чикаго, Лос-Анджелесе, Сан-Франциско и Хьюстоне. Но все же большинство иммигрантов предпочитает селиться в Нью-Йорке, где в значительной степени сохранилась связь с русской историей, традицией и культурой.

Израиль

Не известно сколько бы сейчас было представителей русскоязычной диаспоры в Израиле, если бы на рубеже 1980-90-х годов правительство США не убедило израильские власти принять основной поток иммигрантов из СССР у себя. Советское руководство также поспособствовало этому процессу, упростив репатриацию евреев в Израиль.
За первые два года в Израиль прибыло около 200 тыс. переселенцев из СССР, но к началу XXI столетия количество эмигрантов из России уменьшилось до 20 тыс. человек в год.
Сегодня русскоязычная диаспора в Израиле насчитывает около 1,1 млн. человек – примерно 15% населения страны. Это второе после арабов национальное меньшинство. Диаспора преимущественно представлена евреями – этнически русских в ней не более 70 тыс. человек.

Латвия

Латвию можно назвать страной, где русских больше всего приходится на душу населения – 620 тыс. человек, что составляет примерно 35% от общего количества жителей страны. Русскоязычную диаспору в Латвии еще называют «диаспорой катаклизмов», так как русские здесь остались после распада СССР.
Интересно, что жители древнерусских земель селились на территории современной Латвии еще в X-XII веках, а в 1212 году здесь было основано Русское подворье. Позднее в страну активно переселялись старообрядцы, спасаясь от гонений.
После распада СССР Латвию покинуло около 47 тыс. русскоязычного населения, хотя ситуация очень быстро стабилизировалась. Согласно данным социологического центра Latvijas fakti сейчас русским языком владеют 94,4% жителей страны.
Большая часть русскоязычного населения Латвии сосредоточена в крупных городах. К примеру, в Риге почти половина жителей относит себя к русской диаспоре. Фактически весь крупный бизнес в Латвии контролируется русскими, не удивительно, что в первую десятку рейтинга богатейших людей Латвии входит шестеро русских.

Казахстан

Русские в Казахстане это большей частью потомки ссыльных людей XIX – первой половины XX столетия. Активный прирост русского населения Казахстана начался в период столыпинских реформ. К 1926 году русские в Казакской АССР составляли 19,7% от общего числа населения.
Интересно, что на момент распада СССР русских и других европейцев в Казахстане было около 6 млн. человек – это больше половины жителей страны. Однако вплоть до настоящего времени наблюдается постоянный отток русскоязычного населения. Согласно официальной статистике русским языком в стране владеют 84,4% населения, но русскими себя считают около 26% – примерно 4 млн. человек, что составляет самую большую русскоязычную диаспору в мире.

Применение JSON на стороне сервера для получения запросов и создания ответов

Серия контента:

Настоящая ценность JSON

В мы говорили о том, что JSON удобен как формат данных для Ajax-приложений, потому что позволяет быстро конвертировать JavaScript-объекты в строковые значения и наоборот. Так как Ajax-приложения лучше всего приспособлены для отправления и получения обычного текста, то почти всегда предпочтительнее использовать тот API, который умеет его генерировать; JSON же помимо этой возможности позволяет также работать с родными объектами JavaScript и не беспокоиться о том, как эти объекты будут выглядеть в тексте.

Ресурсный центр Ajax на developerWorks
Обратитесь к – универсальному источнику информации об Ajax-программировании, где можно найти статьи, обучающие руководства, форумы, блоги, wiki-материалы, информацию о событиях и новости. Если что-то происходит, то там есть об этом информация.

XML обладает теми же преимуществами текстового формата, что и JSON, однако API для преобразования JavaScript-объектов в XML (а таковые существуют, и не в единственном числе) не так хорошо проработаны по сравнению с программным интерфейсом JSON; создавая и изменяя объекты, вам иногда самим придётся заботиться о том, чтобы выбранный API смог нормально работать с этими объектами. С JSON всё проще: он обрабатывает практически все мыслимые типы объектов и просто возвращает вам данные в приятном JSON-представлении.

Итак, самая главная ценность JSON состоит в том, что он позволяет работать с JavaScript как с JavaScript , а не как с языком форматирования данных. Так что вы можете применять в своём коде все наработанные навыки по работе с JavaScript-объектами, не заботясь о том, как эти объекты будут преобразованы в текст. Вы лишь вызываете в конце простой JSON-метод:

String myObjectInJSON = myObject.toJSONString();

и получаете текст, который можно отправлять на сервер.

Доставка JSON на сервер

В отправке данных JSON на сервер нет ничего особо сложного, но это важный момент, и у вас есть ряд возможностей для выбора. Однако если вы остановите свой выбор на JSON, то дальнейшие решения принимать будет гораздо проще, так как выбор значительно сузится, и вам не придётся сильно напрягаться по этому поводу. В конце концов, вам просто надо доставить JSON-строку на сервер, причём желательно максимально быстро и просто.

Отправление JSON в парах «имя/значение» методом GET

Самый простой способ доставить JSON-данные на сервер – это преобразовать их в текст и послать его как значение пары «имя/значение». Помните, JSON-отформатированные данные – это всего лишь один довольно большой объект, который выглядит приблизительно так, как показано в листинге 1:

Листинг 1. Простой JavaScript-объект в JSON-формате
var people = { "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "[email protected]" }, { "firstName": "Jason", "lastName":"Hunter", "email": "[email protected]" }, { "firstName": "Elliotte", "lastName":"Harold", "email": "[email protected]" } ], "authors": [ { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" }, { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }, { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" } ], "musicians": [ { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" }, { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" } ] }

Итак, этот текст можно отправить серверному скрипту внутри пары «имя/значение», например, так:

var url = "organizePeople.php?people=" + people.toJSONString(); xmlHttp.open("GET", url, true); xmlHttp.onreadystatechange = updatePage; xmlHttp.send(null);

Вроде бы всё здесь хорошо, но на самом деле есть одна загвоздка: в нашей JSON-строке с данными присутствуют пробелы и другие символы, которые Web-браузер может попытаться интерпретировать. Чтобы эти символы не вызвали проблем на сервере (и не сорвали бы передачу данных) следует добавить в код JavaScript-функцию escape() . Вот так:

var url = "organizePeople.php?people=" + escape(people.toJSONString()); request.open("GET", url, true); request.onreadystatechange = updatePage; request.send(null);

Эта функция обрабатывает пробелы, слеши и всё остальное, что может сбить с толку браузер. Она конвертирует их в «безопасные» в этом смысле символы (например, пробел преобразуется в escape-последовательность %20 , которую браузеры уже не воспринимают как пробел, а просто без изменений передают на сервер). Затем уже сервер выполнит обратное преобразование (обычно автоматически), и мы получим строку в том виде, в каком она была до передачи.

У этого подхода есть два недостатка:

  • Во-первых, мы отправляем данные, размер которых потенциально может быть очень большим, посредством GET-запроса, имеющего ограничение на длину URL-строки. Максимально допустимый размер строки очень велик, но мы никогда не знаем, насколько длинную строку получим после преобразования объекта в текст, особенно если этот объект достаточно сложен.
  • Во-вторых, мы отправляем данные через сеть открытым текстом – то есть самым небезопасным из всех мыслимых методов передачи данных.

Для ясности замечу, что оба эти недостатка больше связаны с ограничениями GET-запросов, чем со спецификой JSON. Однако если вы отправляете на сервер больше чем просто фамилию или имя пользователя или результат его выбора в форме на вашем сайте, то эти недостатки могут изрядно подпортить вам жизнь. Если вы начинаете работать с данными, которые могут быть хоть сколько-нибудь конфиденциальными или обладать большим размером, вам определённо следует обратить своё внимание на POST-запросы.

Передача JSON-данных методом POST

Если вы решили использовать для отправки JSON-данных на сервер метод POST вместо GET, то больших изменений в код вносить не придётся. Вот всё, что нужно сделать:

var url = "organizePeople.php?timeStamp=" + new Date().getTime(); request.open("POST", url, true); request.onreadystatechange = updatePage; request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); request.send(people.toJSONString());

Большая часть этого кода должна быть вам знакома по статье " : в которой обсуждалось создание POST-запросов. Здесь мы открываем запрос, используя POST вместо GET, и устанавливаем соответствующий заголовок «Content-Type», указывающий на тип ожидаемых данных. В данном случае он будет выглядеть так: application/x-www-form-urlencoded , давая понять серверу, что мы передаём просто текстовые данные, которые он в принципе мог бы получить и из обычной HTML-формы.

Ещё одним небольшим изменением в коде является добавление к URL текущего времени. Это сделано для того, чтобы предотвратить кэширование запросов и обеспечить их создание и отправку при каждом вызове метода; строки URL каждый раз будут немного различаться благодаря изменению временной метки. Это часто используемый приём, гарантирующий, что POST-запрос будет действительно каждый раз генерироваться заново и Web-браузер не попытается кэшировать ответы от сервера.

JSON – это просто текст

При использовании GET и POST-запросов очень важно, что JSON - это, в конце концов, обычный текст. С ним можно легко работать и передавать серверу, так как он не требует никакого специального кодирования. Текстовые данные можно обработать любым серверным скриптом. Если бы JSON был двоичным форматом или каким-нибудь хитро закодированным текстом, всё было бы не так просто. Итак, JSON – это обычные текстовые данные, которые скрипт в принципе мог бы получить и при подтверждении HTML-формы (как мы видели, когда речь шла о заголовке «Content-Type» в POST-запросах), так что вам не нужно сильно заморачиваться по поводу отправки его на сервер.

Интерпретация JSON на сервере

Как только вы написали свой клиентский JavaScript-код, позволяющий пользователям взаимодействовать с вашими Web-страницами и формами, и получили информацию, которую надо отправить на обработку серверной программе, главным действующим лицом в вашем приложении (и, вероятно, во всем том, что мы называем "Ajax-приложениями", предполагая, что вызов серверного скрипта выполняется асинхронно) становится сервер. И здесь выбор, который вы сделали на стороне клиента, решив использовать JavaScript-объекты и JSON-данные, должен совпасть с соответствующим решением на стороне сервера, где выбирается API для декодирования JSON-данных.

Два этапа внедрения JSON на сервер

Работа с JSON на стороне сервера независимо от используемого серверного языка состоит, по сути, из двух этапов:

  1. Поиск JSON-парсера /инструментария/вспомогательного API для вашего серверного языка
  2. Применение JSON-парсера/инструментария/вспомогательного API для извлечения данных из запроса клиента и преобразования их к виду, понятному серверному скрипту

И это всё, что нужно сделать. Давайте более детально рассмотрим оба этапа.

Поиск JSON-парсера

Лучшим ресурсом для поиска JSON-парсера и других инструментальных программных средств, связанных с JSON, является Web-сайт JSON (см. ссылки в ). Помимо обучающей информации о самом формате, на этой странице можно найти ссылки на JSON-инструментарии (tools) и JSON-парсеры под любые платформы: от ASP до Erlang, от Pike до Ruby. Просто найдите там язык, на котором написан ваш скрипт, и закачайте соответствующий инструментарий (toolkit). Скопируйте его себе или обновите с помощью него версию вашего серверного языка или просто установите его (существует много вариантов: всё зависит от того, что вы используете на сервере: C#, PHP, Lisp или что-то другое), главное - чтобы скрипты или программы у вас на сервере могли использовать этот инструментарий.

Например, если вы используете PHP, то достаточно просто обновить его до недавней версии 5.2, в которую по умолчанию включено JSON-расширение. Это, пожалуй, самый простой способ начать работать с JSON, если вы используете PHP. Если же вы используете Java-сервлеты, то проще всего задействовать пакет org.json с сайта json.org. Для этого надо скачать архив json.zip с Web-сайта JSON, скопировать файлы с исходными кодами в компиляционную директорию вашего проекта и соответственно скомпилировать их - и вы уже сможете работать с JSON. Примерно то же самое надо сделать и при использовании других языков; лучший помощник в этом – ваш собственный опыт программирования под соответствующую серверную платформу.

Использование JSON-парсера

После того как необходимый инструментарий установлен, остается только вызвать нужный метод. Например, предположим, что мы используем PHP и модуль JSON-PHP:

// Это лишь фрагмент большого серверного PHP-скрипта require_once("JSON.php"); $json = new Services_JSON(); // принимаем POST-данные и декодируем их $value = $json->decode($GLOBALS["HTTP_RAW_POST_DATA"]); // теперь работаем с переменной $value как с обычными «сырыми» данными PHP

С помощью этого кода мы помещаем все данные (массивы, множественные строки, единичные значения - всё, что было в JSON-структуре с данными) в переменную $value , причём в родном PHP-формате.

Если бы мы использовали на сервере Java-сервлеты и пакет org.json , то код выглядел бы приблизительно так:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { StringBuffer jb = new StringBuffer(); String line = null; try { BufferedReader reader = request.getReader(); while ((line = reader.readLine()) != null) jb.append(line); } catch (Exception e) { //сообщение об ошибке } try { JSONObject jsonObject = new JSONObject(jb.toString()); } catch (ParseException e) { // crash and burn throw new IOException("Ошибка при разборе строки запроса"); } // Работаем с данными, используя методы типа: // int someInt = jsonObject.getInt("intParamName"); // String someString = jsonObject.getString("stringParamName"); // JSONObject nestedObj = jsonObject.getJSONObject("nestedObjName"); // JSONArray arr = jsonObject.getJSONArray("arrayParamName"); // и так далее... }

Более подробную информацию можно найти в документации к пакету org.json (см. ссылки в разделе ). (Замечание: если вы хотите более детально изучить org.json или другие программные средства для работы с JSON, напишите мне на e-mail и сообщите об этом. Ваши отклики помогают мне решить, о чём следует писать дальше!) .

Заключение

Теперь вы уже должны знать техническую сторону использования JSON на сервере. Но в этой и статьях мне хотелось не только показать несколько технических аспектов, но и убедить вас в том, что JSON – весьма гибкий и мощный формат данных. Даже если вы не будете использовать его в каждом своём приложении, хороший Ajax- и JavaScript-программист всегда должен иметь под рукой этот полезный инструмент и уметь применить его, когда в том возникнет необходимость.

Мне определённо хотелось бы услышать о вашем собственном опыте работы с JSON и том, какие языки, по вашему мнению, хорошо – или может быть не очень – работают с JSON-данными на стороне сервера. Загляните на страницу группы новостей о Java и XML (ссылки в ) и расскажите мне об этом. Наслаждайтесь JSON и всей мощью текстовых форматов данных.

Всем привет! В этой статье мы рассмотрим, как отправлять данные клиенту в JSON формате в NodeJS .

Введение

В прошлой статье мы рассмотрели, как отправлять HTML страницы клиенту, испоьзуя потоки в NodeJS . Сегодня же мы рассмотрим, как отправлять данные в формате JSON .

Мы не будем использовать потоки для решения этой задачи, поэтому вы можете удалить весь код, относящийся к ним. Вместо них мы будем использовать end() метод, который нам уже знаком и применялся в одной из предыдущих статей.

Как отправить JSON

Первым делом мы должны поменять заголовок, чтобы браузер смог правильно обработать наши данные:

Res.writeHead(200, {"Content-Type": "application/json"});

Теперь давайте создадим объект, который мы хотим отправить клиенту:

Var myObj = {
name: "John",
job: "programmer",
age: 27
};

Теперь давайте отправим данные клиенту:

Res.end(myObj);

Но на самом деле такой код не заработает правильно. Дело все в том, что метод end() ожидает увидеть данные в формате строки или буфер. У нас же есть объект, но мы можем сделать из него строку следующим образом:

Res.end(JSON.stringify(myObj));

Теперь, если вы запустите приложение, то увидите, что данные пришли в JSON формате в виде строки. Также вы можете использовать инструменты разработчика в браузере и посмотреть, что заголовок также был установлен правильно.

Зачем отправлять JSON данные клиенту

У вас, возможно, возник вопрос, а зачем вообще отправлять данные клиенту в JSON формате. Чтобы ответить на этот вопрос, представьте, что у вас есть какой-нибудь javascript , выполняющийся на стороне клиента(frontend ), и он может создать какой-нибудь запрос. Например, у вас есть API . Вы можете написать следующий запрос:

Localhost:3000/api/request

И сервер должен будет отправить нам данные по этому запросу. Удобнее всего будет отправлять их именно в формате JSON , чтобы скрипт, работающий на стороне клиента, мог потом с легкостью эти данные обработать.

Заключение

Итак, сегодня мы рассмотрели, как отправлять данные клиенту в формате JSON в NodeJS .

JSON (JavaScript Object Notation) – формат для обмена данными в текстовом виде. Позволяющий передавать сложные структуры данных в сериализованном виде. Этот формат передачи данных стал настолько популярен, что уже в ядро PHP начиная с версии 5.2.0, были добавлены функции по обработке данных в этом формате. А это значит, что нет необходимости в подключении дополнительных расширений. Формат данных JSON хорошо понятен человеку. Кроме того данный тип обмена данными широко используется между различными API сервисами. А при корректной разработке алгоритмов для обмена информацией, можно получить очень высокий прирост скорости чем, к примеру, при работе с данными в формате XML .

Отправка данных

Отправить данные в формате JSON можно двумя способами: сформировать GET или POST запрос с закодированными данными расположенными в GET или POST переменной или же поместить данные в тело документа. На практике обычно используется второй вариант.

Для произведения отправки данных необходимы нижеперечисленные функции:

  • string json_encode (mixed value [, int options = 0 ])

    В качестве параметра value указываются данные которые требуется закодировать. Поддерживается любой тип кроме типа resource . Параметр options содержит битовую маску из возможных предоставленных значений (см. таблицу с предоставленными JSON константами).

  • resource stream_context_create (])

    Данная функция предназначена для создания и возврата контекста потока с опциями указанными в параметре options . Необязательный параметр options должен иметь тип ассоциативного массива. Изначально, он пуст. Второй необязательный параметр params также должен являться ассоциативным массивом в формате $data[‘имя’] = значение.

  • string file_get_contents (string filename [, bool use_include_path [, resource context [, int offset [, int maxlen ]]]])

    Использование этой функции позволяет получить содержимое файла в виде строки. Параметр filename это имя считываемого файла. В параметре use_include_path начиная с версии PHP 5 можно использовать константу FILE_USE_INCLUDE_PATH для поиска файла в include path. Параметр context представляет ресурс контекста, созданный с помощью функции stream_context_create(). В случае неудавшейся попытки открытия файла, будет возвращено значение false . Параметр offset содержит смещение с которого начнется чтение данных. В параметре maxlen указывается размер получаемых данных.

    Примечание : смещение не указывается при работе, с удаленными потоками.

Ниже приведен пример отправки данных в формате JSON:

// Данные для отправки $request = array("StartDate" => "2013-10-10", "EndDate" => "2013-10-10", "IDS" => array(1,2,3,4,5,6,7)); // Указание опций для контекста потока $options = array ("http" => array ("method" => "POST", "header" => "Content-Type: application/json; charset=utf-8\r\n", "content" => json_encode($request))); // Создание контекста потока $context = stream_context_create($options); // Отправка данных и получение результата echo file_get_contents("http://test.ru/json.php", 0, $context);

Здесь используется импровизированная структура данных, состоящая из начальной и конечной даты, а также массива номеров некоторых условных записей. Обратите внимание на то, что в заголовке запроса Content-Type указывается тип “application/json”.

Получение данных

Для того чтобы получить переданные данные вышеописанным способом требуется произвести чтение данных из потока ввода “php://input ”.

Используемые функции для принятия данных:

  • mixed json_decode (string json [, bool assoc = false [, int depth = 512 [, int options = 0 ]]])

    Данная функция декодирует строку в формате JSON . В параметре json указывается строка для декодирования. Параметр assoc отвечает за то, будут ли возвращаемые данные преобразованы в ассоциативный массив. Если таковая необходимость имеется, то необходимо указать в качестве значения этого параметра true . Параметр depth указывает на глубину рекурсии. И последний четвертый параметр options содержит битовую маску опций для декодирования. На сегодняшний день поддерживается только JSON_BIGINT_AS_STRING (по умолчанию большие целые числа приводятся к числам с плавающей запятой (float))

  • resource fopen (string filename , string mode [, bool use_include_path [, resource context ]])

    Открывает файл и возвращает его дескриптор. Параметр filename это именованный ресурс, указывающий на файл. В параметре mode указывается тип доступа к файлу (см. таблицу со списком возможных режимов для fopen()). Далее идут два необязательных параметра это: use_include_path и context . При установке параметра use_include_path в значение true или 1 и при условии, что в качестве именованного ресурса задан относительный путь, будет осуществлен поиск открываемого файла в списке директорий используемом функциями include и require . На практике этот параметр практически не используется. Параметр context используется для указания контекста ресурса.

  • string stream_get_contents (resource handle [, int maxlen = -1 [, int offset = -1 ]])

    Эта функция позволяет получить содержимое потока в виде строки. Параметр handle является ресурсом потока. Параметр maxlen содержит максимальное количество байт для чтения. По умолчанию он установлен в -1, что указывает на получение всех данных. Параметр offset содержит смещение, с которого начнется чтение данных. По умолчанию он также установлен в -1, что означает, что чтение будет произведено с начальной позиции.

Ниже приведен пример получения данных в формате JSON на стороне сервера:

// Открываем на чтение поток ввода $f = fopen("php://input", "r"); // Получаем содержимое потока $data = stream_get_contents($f); if ($data) { // Код обработки print_r(json_decode($data)); }

Полученная структура данных:

StdClass Object ( => 2013-10-10 => 2013-10-10 => Array ( => 1 => 2 => 3 => 4 => 5 => 6 => 7))

Примечание : необходимо учитывать тот момент, что для работы с форматом JSON, данные должны быть в кодировке utf-8.

Предоставленные JSON константы для функции json_encode()

JSON_HEX_TAG (integer) Все кодируются в \u003C и \u003E. Доступна начиная с PHP 5.3.0.
JSON_HEX_AMP (integer) Все & кодируются в \u0026. Доступна начиная с PHP 5.3.0.
JSON_HEX_APOS (integer) Все символы ‘ кодируются в \u0027. Доступна начиная с PHP 5.3.0.
JSON_HEX_QUOT (integer) Все символы " кодируются в \u0022. Доступна начиная с PHP 5.3.0.
JSON_FORCE_OBJECT (integer) Выдавать объект вместо массива при использовании неассоциативного массива. Это полезно, когда принимающая программа или код ожидают объект или же массив пуст. Доступна начиная с PHP 5.3.0.
JSON_NUMERIC_CHECK (integer) Кодирование строк, содержащих числа, как числа. Доступна начиная с PHP 5.3.3.
JSON_BIGINT_AS_STRING (integer) Кодирует большие целые числа в виде их строковых эквивалентов. Доступна начиная с PHP 5.4.0.
JSON_PRETTY_PRINT (integer) Использовать пробельные символы в возвращаемых данных для их форматирования. Доступна начиная с PHP 5.4.0.
JSON_UNESCAPED_SLASHES (integer) Не экранировать /. Доступна начиная с PHP 5.4.0.
JSON_UNESCAPED_UNICODE (integer) Не кодировать многобайтные символы Unicode (по умолчанию они кодируются как \uXXXX). Доступна начиная с PHP 5.4.0.

Список возможных режимов для fopen() используя mode

‘r’ Открывает файл только для чтения; помещает указатель в начало файла.
‘r+’ Открывает файл для чтения и записи; помещает указатель в начало файла.
‘w’ Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует — пробует его создать.
‘w+’ Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует — пытается его создать.
‘a’ Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует — пытается его создать.
‘a+’ Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует — пытается его создать.
‘x’ Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт FALSE и выдаст ошибку уровня E_WARNING. Если файл не существует, попытается его создать. Это эквивалентно указанию флагов O_EXCL|O_CREAT для внутреннего системного вызова open(2).
‘x+’ Создаёт и открывает для чтения и записи; иначе имеет то же поведение что и’x’.
‘c’ Открывает файл только для записи. Если файл не существует, то он создается. Если же файл существует, то он не обрезается (в отличии от ‘w’), и вызов к этой функции не вызывает ошибку (также как и в случае с ‘x’). Указатель на файл будет установлен на начало файла. Это может быть полезно при желании заблокировать файл (смотри flock()) перед изменением, так как использование ‘w’ может обрезать файл еще до того как была получена блокировка (если вы желаете обрезать файл, можно использовать функцию ftruncate() после запроса на блокировку).
‘c+’ Открывает файл для чтения и записи; иначе имеет то же поведение, что и ‘c’.


© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows