Мой проект - рисовать граф с d3.js. Я нашел некоторый php-код, который определенно то, что я хочу. Но я работаю с C # и против, поэтому я конвертирую его в asp.net. Сначала я хочу написать пример данных с жестким кодом и нарисовать изображение, используя d3.js. а также код JavaScript из этого проекта PHP. Теперь у меня есть веб-метод на стороне сервера, который возвращает строку JSON. Параметр dataSample является типом словаря. Выглядит как ниже и не имеет ошибок.

Return JsonConvert.SerializeObject (dataSample);

Во внешнем интерфейсе я использую ajax для извлечения данных.

 <script>  
        $.ajax({
            type: 'POST',
            url: 'Map.aspx/read_data',
            contentType: 'application/json; charset=utf-8',
            data: "{ }",
            dataType: "json",
            success: function(response) {
                d3.json("", function (data) {    
                    graph.data = response.d;
                    drawGraph();
                });
            },
            error: function(error) {
                console.log("Wwoops something went wrong !");
            }
        });
    </script>

Вызов Ajax успешно выполнен, и в журнале консоли отображается graph.data, который является response.d, как показано ниже

{"DSO":{"name":"DSO","type":"group0","depends":["BPR","Transmission Company","Government"],"dependedOnBy":["TSO","Transmission Company"],"docs":""},"TSO":{"name":"TSO","type":"group1","depends":["BPR","DSO","Producer Secondary Energy","Government"],"dependedOnBy":["Producer Secondary Energy"],"docs":""}}

Затем я хочу зациклить каждый объект json, чтобы я мог сказать drawGraph () нарисовать узел для каждого объекта, например:

for (var name in graph.data) {
        var obj = graph.data[name];
        console.log("name: " + name + "object: " + obj);

Моя проблема заключается в том, что console.log ("имя:" + имя + "объект:" + объект) не выводит каждый объект в Json. Он зацикливает каждую букву, а не отдельный объект.

Некорректный вывод console.log введите описание изображения здесь

Я хочу вывести объект, а не это.

0
Lucky 18 Дек 2015 в 16:05

3 ответа

Лучший ответ
You need to parse json to loop it. Do a proper for loop using the parsed variable.   

<script>  
        $.ajax({
            type: 'POST',
            url: 'Map.aspx/read_data',
            contentType: 'application/json; charset=utf-8',
            data: "{ }",
            // remove this line
            //dataType: "json",
            success: function(response) {
                parsedobj = jQuery.parseJSON(response);
                // do your for loop here
            },
            error: function(error) {
                console.log("Wwoops something went wrong !");
            }
        });
    </script>
1
Arun 18 Дек 2015 в 14:17

Вы должны JSON.parse строка как json, а затем зациклить объект json.

Примере:

<script>
var r = JSON.parse('{"DSO":{"name":"DSO","type":"group0","depends":["BPR","Transmission Company","Government"],"dependedOnBy":["TSO","Transmission Company"],"docs":""},"TSO":{"name":"TSO","type":"group1","depends":["BPR","DSO","Producer Secondary Energy","Government"],"dependedOnBy":["Producer Secondary Energy"],"docs":""}}');

for (var g in r) {
     for (var c in r[g]) {
            console.log(r[g]['name']);
    }

}       
</script>
0
Nikolay Todorov 18 Дек 2015 в 13:35

Как правильно сказал @shilly, вы зацикливаете JSON ...
Этого должно быть достаточно:

var graphDataObject = JSON.parse(graph.data);

for (var name in graphDataObject) {
    var obj = graphDataObject[name];
    console.log("name: " + name + " object: " + obj);
}
0
MarcoS 18 Дек 2015 в 13:35