Блоки данных отображают вложенные объекты и массивы из запроса Ajax

#jquery #datatables

#jquery #таблицы данных

Вопрос:

У меня есть этот json из стороннего API, который не находится под моим контролем-

 https://pastebin.com/WNZZWXV7
 

(содержит урезанный отдельный набор)

2 значения, которые я хочу в строке, выглядят следующим образом-

Столбец 1 = response.listResults[0].listInstrument.instrumentBasic.symbol («SAREGAMA» в примере)

Столбец 2 = response.listResults[0].listColumns[0].Значение данных.Двойное значение (823 в примере)

Это мой текущий код-

 <table id="example" class="display" style="width:100%"></table>

<script>    
$(document).ready(function() {
    $('#example').DataTable( {
        "ajax": '..private url',
        
        "columns": [
            { "title": "Stock", "data": "response.listResults.listInstrument.flagged", "searchable": true, "visible": true },
            { "title": "Price", "data": "response.listResults.listColumns[0].dataValue.doubleValue" }
        ]
    } );
} );
</script>
 

Я просмотрел примеры здесь — https://datatables.net/examples/ajax / но не в состоянии разобраться в этом. Любая помощь или указания приветствуются.

Ответ №1:

Это несколько неудобная структура JSON, потому что она содержит два отдельных массива, которые вы хотите использовать в качестве точек итерации для каждого столбца DataTables, а во втором столбце вы хотите использовать только первый вложенный объект…

Вот один из подходов:

Измените свой ajax параметр, чтобы он мог использовать dataSrc параметр:

 "ajax": {
  "url": "..private url",
  "dataSrc": "response.listResults"
}
 

В этом случае dataSrc указывает на местоположение в вашем ответе JSON, где начинается первый массив JSON: listResults массив.

Теперь вы можете использовать это в качестве отправной точки для каждого из ваших columns определений:

 "columns": [
  { 
    "title": "Stock", 
    "data": "listInstrument.instrumentBasic.symbol", 
    "searchable": true, 
    "visible": true 
  },
  { 
    "title": "Price",
    "data": "listColumns.0.dataValue.doubleValue"
  }
]
 

Определение данных первого столбца будет повторяться для каждого listInstrument объекта. Но поскольку существует только один такой объект, он будет захватывать только одно связанное значение для имени символа: «SAREGAMA».

Второй столбец используется listColumns.0 для обеспечения просмотра только первого (из многих) listColumns объектов. Это дает вам единственную цену, которую вы хотите: 823. Очевидно, предполагается, что вы в порядке с жестким кодированием этого нуля для первого объекта.

Конечный результат:

введите описание изображения здесь

Комментарии:

1. Спасибо, это сработало для моего json. Я принял ответ.