2015-09-22 2 views
0

Предположим, я попрошу Mailchimp для данных подписчика, и они отправляют запрос http с JSON в теле. Должен ли я быть в состоянии пойти:Являются ли API-интерфейсы JSON возвращать строки или объекты JavaScript?

var thingy = body.property; 

Или я должен идти:

var object = JSON.parse(body); 
var thingy = object.property; 

?

Кроме того, обрабатывает ли элемент node.js синтаксический анализ JSON для меня?

+1

Вы можете напрямую получить доступ к данным json. Разбор не требуется. –

+0

Ну, с новым API Mailchimp, иногда это так, что и вызвало вопрос. Теперь они должны, по крайней мере, быть последовательными, но почему было бы нормально отправлять сырые объекты по проводам? Не навязывает и не анализирует, что сохраняет формат в безопасности? – Costa

+1

Это всегда будет строка, если только вы не используете для отправки запроса, разбор синтаксического ответа для вас. –

ответ

2

JSON отправляется по проводам с сервера в виде строки. Вот что такое JSON - строковый формат.

Независимо от того, приходит ли он к вашему коду в виде строки или как уже разобранный объект Javascript полностью зависит от кода, который вы используете, чтобы сделать HTTP-запрос и, возможно, какие заголовки на сервере установлены и какое автоматическое обнаружение кода выполняет Вызов Ajax.

Если заголовок ответа задает тип json, тогда код, создающий запрос, автоматически проанализирует его для вас в Javscript. Другой код оставит это для вызывающего абонента. Если сервер не устанавливает правильные заголовки, тогда какой-то код будет автоматически определять его как JSON и анализировать, а другой код не будет.

Итак ... нижняя строка. Это полностью зависит от того, что сервер делает в своем ответе и какой код используется для выполнения запроса. Вы можете легко просто сделать console.log(body) и посмотреть, есть ли у вас строка JSON или уже обработанный Javascript-объект.

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

if (typeof body === "string") { 
    body = JSON.parse(body); 
} 
+0

Rockstar ответ, спасибо! У меня есть сайт node.js. Я использую связующее средство для анализатора тела, но когда мой сервер делает запросы к mailchimp api, я просто использую библиотеку запросов, которая, как я считаю, автоматически не анализирует. Мне нужно вникнуть и посмотреть, что представляют заголовки ответов, если «application/json» есть, и, надеюсь, скоро они станут оберткой node.js для api.До тех пор я использую условное выражение типа. Еще раз спасибо! – Costa

2

Зависит от API, обычно вы получаете заголовок ответа Content-type: application/json. Если это так, вероятно, нет необходимости разбирать ответ, так как большинство клиентов поймут, что это объект json и проанализируйте его для вас. Во всяком случае, не все клиенты сделают это автоматически.

+0

Получил это, может быть, как работает кузов-парсер ...? – Costa

+0

Не знаю, но, как минимум, jquery работает так, если тип содержимого не является приложением/json, вы получаете простую строку (по крайней мере, по моему опыту) – taxicala

+0

* ", поскольку клиент поймет, что это json-объект . * * Это полностью зависит от того, какой клиент вы используете, будь то модуль 'http' напрямую или что-то вроде' npm install request'. модуль 'http' не выполняет этот синтаксический анализ для вас. –

Смежные вопросы