Hvad er den korrekte JSON-indholdstype?

Jeg har rodet rundt med JSON i et stykke tid, bare skubbe det ud som tekst, og det har ikke skadet nogen (som jeg kender til), men jeg vil gerne begynde at gøre tingene ordentligt.

Jeg har set mange påståede "standarder" for JSON-indholdstypen:

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

Men hvilken er korrekt eller bedst? Jeg forstår, at der er sikkerheds- og browserunderstøttelsesproblemer, der varierer mellem dem.

Jeg ved, at der er et lignende spørgsmål, Hvilken MIME-type, hvis JSON returneres af et REST API?, men jeg vil gerne have et lidt mere målrettet svar.

Løsning

For JSON-tekst:

application/json

MIME-medietypen for JSON-tekst er application/json. Standardkodningen er UTF-8. (Kilde: RFC 4627).

For JSONP (kørbart javascript) med callback:

application/javascript

Her er nogle blogindlæg, der blev nævnt i kommentarerne, og som er relevante.

Kommentarer (8)

Selvfølgelig er den korrekte MIME-medietype for JSON application/json, men det er nødvendigt at vide, hvilken type data der forventes i dit program.

Jeg bruger for eksempel Ext GWT, og serverresponset skal gå som text/html, men indeholder JSON-data.

Client side, Ext GWT form listener

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

Ved brug af application/json svartype foreslår browseren, at jeg gemmer filen.

Server side kildekodeuddrag ved hjælp af 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);
    }
};
Kommentarer (1)

Hvis du kalder ASP.NET-webservices fra klientsiden, skal du bruge application/json, for at det virker. Jeg mener, at dette er det samme for jQuery og Ext frameworks.

Kommentarer (2)