Biorąc pod uwagę ciąg danych JSON, jak można bezpiecznie przekształcić ten ciąg w obiekt JavaScript?
Oczywiście możesz to zrobić w sposób niebezpieczny, używając czegoś takiego jak...
var obj = eval("(" + json + ')');
...ale to pozostawia nas podatnymi na ciąg json zawierający inny kod, który wydaje się bardzo niebezpieczny, aby po prostu eval.
Edit: Ta odpowiedź jest dla IE < 7, dla nowoczesnych przeglądarek sprawdź Jonathan's odpowiedź powyżej.
Edit: Ta odpowiedź jest przestarzała i Jonathan's answer above (JSON.parse(jsonString)
) jest teraz najlepszą odpowiedzią.
JSON.org posiada parsery JSON dla wielu języków, w tym 4 różne dla Javascript. Wierzę, że większość ludzi uznałaby json2.js za ich implementację goto.
Nie jestem pewien co do innych sposobów na zrobienie tego, ale oto jak to zrobić w Prototype (JSON tutorial).
new Ajax.Request('/some_url', {
method:'get',
requestHeaders: {Accept: 'application/json'},
onSuccess: function(transport){
var json = transport.responseText.evalJSON(true);
}
});
Wywołanie funkcji evalJSON() z wartością true jako argumentem oczyszcza przychodzący ciąg znaków.
Jeśli używasz jQuery, możesz też po prostu zrobić $.getJSON(url, function(data) { });
.
Następnie możesz robić rzeczy takie jak data.key1.something
, data.key1.something_else
, itp.