2012-06-07 15 views
62

Uczę się d3. Istnieje certain ways of loading the data w d3 js. Ale wszystkie wydają się robić HTTP GET. W moim scenariuszu mam już dane json w ciągu znaków. Jak mogę użyć tego ciągu zamiast innego żądania http? Próbowałem szukać dokumentacji, ale nie znalazłem żadnego.d3 js - ładowanie json bez http get

to działa:

d3.json("/path/flare.json", function(json) { 
    //rendering logic here 
} 

Teraz, jeśli mam:

//assume this json comes from a server (on SAME DOMAIN) 
var myjson = '{"name": "flare","children": [{"name": "analytics","children": [{"name": "cluster","children": [{"name": "MergeEdge", "size": 10 }]}]}]}'; 

Jak używać już obliczone 'myjson' w d3 & uniknąć połączenia asynchronicznego do serwera? Dzięki.

+0

Co to jest, co chcesz zrobić z tym obiektem? Dlaczego miałbyś zakodować ten kod jako ciąg zamiast zwykłego obiektu JavaScript? – Pointy

+1

@Pointy Serwer zwraca go jako atrybut modelu w odpowiedzi. Więc mam ciąg. Na przykład, json mam odpowiada kod w http://mbostock.github.com/d3/ex/bubble.html To jest logika, która tam jest – Ravi

+0

Zobacz także http://stackoverflow.com/questions/20940854/how-to-load-data-from-an-internal-json-array-raczej-niż-od-zewnętrznego-resour –

Odpowiedz

80

Wystarczy wymienić d3.json połączenia z

json = JSON.parse(myjson); 

IE:

var myjson = '{"name": "flare","children": [{"name": "analytics","children": [{"name": "cluster","children": [{"name": "MergeEdge", "size": 10 }]}]}]}'; 

// d3.json("/path/flare.json", function(json) { #delete this line 

    json = JSON.parse(myjson); //add this line 

    //rendering logic here 

//} #delete this line 

AKTUALIZACJA 09/2013

kod oryginalny uległ zmianie. Więc varname json powinny być root:

// d3.json("flare.json", function(error, root) { #delete this line 

    root = JSON.parse(myjson); //add this line 

    //rendering logic here 

//} #delete this line 
+1

Masz tę część. Czy możesz dać mi znać, jak użyć tego sparsowanego obiektu "json" do renderowania wykresu (bez dokonywania żądania GET) tutaj http://mbostock.github.com/d3/ex/bubble.html W przykładzie użyto * d3. json ("../danych/flare.json", funkcja (json) *, która wywołuje http: Dowolne wskazówki do dokumentów/przykładów również będą pomocne.Dzięki . – Ravi

+6

@Ravi zamień wiersz '14' na' json = JSON.parse (myjson); 'i usuń wiersz' 33' Wypróbuj –

+0

Wypróbowany! Teraz widzę, co się dzieje ... Dziękuję !! – Ravi

2

Zgodnie z tym przykładem:

http://phrogz.net/JS/d3-playground/#StockPrice_HTML

Oto one przechowywanie danych wykresu wewnątrz zmiennej $ data i ustawienie go poprzez .data ($ dane).

Zastosowałbym tę metodę do dowolnego wykresu, którego używasz.

+0

To może zadziałać; Mają podobny przykład tutaj: https://github.com/mbostock/d3/wiki/Selections#wiki-data – Adrian

2

Odpowiedź z chumkiu pracował wielki dla mnie, ale potrzebuje kilku poprawek - w najnowszej wersji wykresu d3 bąbelkowych, trzeba zdefiniować korzeń zamiast JSON, podobnie jak w

root = JSON.parse(myjson); 

Alternatywnie, ty może zastąpić "root" przez "json" w pozostałej części kodu oczywiście. :-)

Dla każdego, kto przyszedł do tej odpowiedzi z pytaniami na temat drzew węzłów d3, które wykorzystują lokalne zbiory danych, ta odpowiedź zadziałała dobrze - wiele podziękowań dla autorów na tej stronie.