D3 js - загрузка json без http get
Я изучаю d3. Существуют определенные способы загрузки данных в d3 js. Но все они, похоже, делают HTTP GET. В моем сценарии у меня уже есть данные json в строке. Как я могу использовать эту строку вместо того, чтобы делать еще один http-запрос? Я попытался найти документацию для этого, но не нашел его.
Это работает:
d3.json("/path/flare.json", function(json) {
//rendering logic here
}
Теперь, если у меня есть:
//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 }]}]}]}';
Как использовать уже вычисленный "myjson" в d3 и избежать асинхронного вызова на сервер? Спасибо.
Ответы
Ответ 1
Просто замените вызов d3.json
на
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
ОБНОВЛЕНИЕ 09/2013
Исходный код изменился. Поэтому varname json
должно быть root
:
// d3.json("flare.json", function(error, root) { #delete this line
root = JSON.parse( myjson ); //add this line
//rendering logic here
//} #delete this line
Ответ 2
В соответствии с этим примером:
http://phrogz.net/JS/d3-playground/#StockPrice_HTML
Здесь они хранят данные графа в переменной $data и устанавливают его через функцию .data($ data).
Я бы применил этот метод к любому графику, который вы используете.
Ответ 3
Ответ от chumkiu отлично подойдет для меня, но вам нужно несколько настроек - в последней версии d3-пузырьковой диаграммы вам нужно определить root, а не json, как в
root = JSON.parse( myjson );
В качестве альтернативы вы можете заменить "root" на "json" в остальной части кода, конечно.: -)
Для тех, кто приходит к этому ответу с вопросами о деревьях d3 node, которые используют локальные наборы данных, этот ответ отлично подойдет для меня - большое спасибо вкладчикам на этой странице.