11491 votes

Quelle est la bonne JSON type de contenu?

J'ai été déconner avec le JSON pour quelques temps, il suffit de le pousser comme du texte et il n'a pas fait de mal à personne (que je connais), mais j'aimerais commencer à faire les choses correctement.

J'ai vu tellement de nombreux prétendus "normes" pour le JSON type de contenu:

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

Mais laquelle est la bonne, ou meilleure? Je comprends qu'il y a de la sécurité et de la prise en charge du navigateur problèmes différents entre eux.

Je sais qu'il y a une question similaire, Quel type MIME si JSON est retourné par une API REST?, mais j'aimerais un peu plus de la réponse ciblée.

11488voto

Gumbo Points 279147

Pour JSON texte:

Le type MIME pour JSON texte est - application/json. L'encodage par défaut est UTF-8. (Source: RFC 4627).

Pour JSONP avec rappel:

text/javascript

Voici quelques articles de blog qui ont été mentionné dans les commentaires qui sont pertinents.

1798voto

gnrfan Points 7647

L'IANA a enregistré l'officiel, type mime pour JSON comme l' application/json.

Lorsqu'on lui demande pourquoi ne pas text/json, Crockford semble avoir dit JSON n'est pas vraiment de JavaScript ni de texte et aussi de l'IANA a été plus enclins à main application/* que text/*.

Plus de ressources:

1017voto

Alix Axel Points 63455

JSON:

Content-Type: application/json

Pour JSON-P:

Content-Type: application/javascript

693voto

Mikhail.Mamaev Points 3420

Bien sûr, le bon type MIME JSON est - application/json, mais il est nécessaire de réaliser ce type de données est prévu dans votre application.

Par exemple, j'utilise Ext GWT et la réponse du serveur doit aller en tant que text/html , mais qui contient des données JSON.

Côté Client, Ext GWT forme de l'écouteur

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");
    }
});

Dans le cas de l'utilisation de l'application/json type de réponse, le navigateur me suggère d'enregistrer le fichier.

Côté serveur source extrait de code à l'aide de 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);
    }
};

512voto

Bhavin Points 12613

JSON:

La réponse est généré dynamiquement des données, conformément à la requête de paramètres passés dans l'URL.

Exemple:

{ "Name": "Foo", "Id": 1234, "Rank": 7 }

Content-Type: application/json


JSON-P:

JSON avec rembourrage. La réponse est des données JSON, avec un appel de fonction enroulé autour d'elle.

Exemple:

functionCall({"Name": "Foo", "Id": 1234, "Rank": 7});

Content-Type: application/javascript

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X