Datables 从 Ajax 请求渲染嵌套对象和数组

问题描述

我有来自第三方 API 的这个 json,它不在我的控制之下-

https://pastebin.com/WNZZWXV7

(包含精简单套)

我想要连续的2个值是这样的-

第 1 列 = response.listResults[0].listInstrument.instrumentBasic.symbol(示例中为“SAREGAMA”)

第 2 列 = response.listResults[0].listColumns[0].dataValue.doubleValue(示例中为 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/,但无法解决。任何帮助或指示表示赞赏。

解决方法

这是一个有点尴尬的 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。这显然假设你可以硬编码第一个对象的零。

最终结果:

enter image description here