Кой е правилният тип съдържание JSON?

От известно време си играя с JSON, просто го изтласквам като текст и това не е навредило на никого (доколкото знам), но бих искал да започна да правя нещата правилно.

Виждал съм толкова много предполагаеми "стандарти" за типа съдържание JSON:

application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json

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

Знам, че има подобен въпрос, Какъв тип MIME, ако JSON се връща от REST API?, но бих искал да получа малко по-целенасочен отговор.

Решение

За JSON текст:

application/json

MIME медийният тип за JSON текст е application/json. Кодирането по подразбиране е UTF-8. (Източник: RFC 4627).

За JSONP (изпълним javascript) с обратна връзка:

application/javascript

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

Коментари (8)

Разбира се, правилният MIME медиен тип за JSON е application/json, но е необходимо да осъзнаете какъв тип данни се очакват във вашето приложение.

Например, аз използвам Ext GWT и отговорът на сървъра трябва да се изпрати като text/html, но съдържа JSON данни.

Страна на клиента, слушател на формуляри Ext GWT

uploadForm.getForm().addListener(new FormListenerAdapter()
{
    @Override
    public void onActionFailed(Form form, int httpStatus, String responseText) 
    {
        MessageBox.alert("Error");
    }

    @Override
    public void onActionComplete(Form form, int httpStatus, String responseText) 
    {
        MessageBox.alert("Success");
    }
});

В случай на използване на тип отговор application/json браузърът ми предлага да запазя файла.

Изходна част от кода от страна на сървъра, използваща Spring MVC

return new AbstractUrlBasedView() 
{
    @SuppressWarnings("unchecked")
    @Override
    protected void renderMergedOutputModel(Map model, HttpServletRequest request,
                                           HttpServletResponse response) throws Exception 
    {
        response.setContentType("text/html");
        response.getWriter().write(json);
    }
};
Коментари (1)

Ако извиквате ASP.NET Web Services от страната на клиента, трябва да използвате application/json, за да работи. Смятам, че това е същото и за фреймуърците jQuery и Ext.

Коментари (2)