JSON в HTML-таблицу. Не удается разобрать заголовок таблицы, так как имя поля объекта json начинается с заглавной буквы? - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь использовать библиотеку Dynatable для преобразования объектов json в HTML-таблицу.

PS: эта проблема также сохраняется для других библиотек, таких как DataTable

Однако в настоящее время значение ячейки всей моей таблицы не определено.

Вот мой пример данных Json

[
   {"Adult":2,"Child":1}, 
   {"Adult":3,"Child":2},
   {"Adult":4,"Child":1}
]

А вот и моя таблица HTML

<table id="myTable">
    <thead>
        <tr>               
            <th>Adult</th>
            <th>Child</th>             
        </tr>
    </thead>
    <tbody>

    </tbody>
</table>

А вот код JavaScript

$(document).ready(function () {
    $.ajax({
        type: 'GET',
        url: 'http://localhost:51071/api/Foo',               
        success: function (response) {
            console.log(response);
            $("#myTable").dynatable({                    
                dataset: {
                    records: response
                }
            });
        },              
        dataType: 'json'
    });
});

Есть какая-то конкретная причина, по которой я получаю неопределенное значение?

В своей документации для преобразования имен атрибутов они упоминают соглашение о присвоении имен по умолчанию, равное camelcase, а приведенный пример - favoriteMusic. Они ожидают, что мое имя поля начнется с маленькой буквы?

Обновление 1:

Оказывается, это потому, что имена полей начинаются с заглавной буквы. Я изменил свои данные JSON следующим образом, и это сработало

[
   {"adult":2,"child":1}, 
   {"adult":3,"child":2},
   {"adult":4,"child":1}
]

Есть идеи для обхода, чтобы заставить его работать с именем поля, начинающимся с заглавной буквы?

1 Ответ

0 голосов
/ 28 июня 2018

Это то, что я закончил

    function firstLetterLowerCase(str) {
        return str.charAt(0).toLowerCase() + str.substr(1);
    }
    $(document).ready(function () {

        $.ajax({
            type: 'GET',
            url: 'http://localhost:51071/api/Foo',               
            success: function (response) {

                response = response.map(function(resObj) {
                    var obj = {};
                    for (key in resObj) {
                        if (resObj.hasOwnProperty(key)) {
                            obj[firstLetterLowerCase(key)] = resObj[key];
                        }
                    }
                    return obj;
                });
                $("#myTable").dynatable({                    
                    dataset: {
                        records:response
                    }
                });                },              
            dataType: 'json'
        });
    });

Таким образом, в основном написана функция для преобразования первой буквы имени поля объекта json из прописной в маленькую.

Это может быть не так эффективно, когда количество записей огромно.

...