将Json String转换为带有标头的Datatable

时间:2018-06-19 00:03:04

标签: jquery json datatable datatables

我有一个Json字符串,我需要创建一个带有来自该json字符串的头的数据表。(并且还需要删除转义字符)

Json String

[\r\n  {\r\n    \"NewsDate\": \"2018-05-05T06:00:00\",\r\n    \"GeoDate\": \"2018-05-02T00:00:00\",\r\n  },
{\r\n    \"NewsDate\": \"2018-06-05T06:00:00\",\r\n    \"GeoDate\": \"2018-06-02T00:00:00\",\r\n  }]

我试图这样做,但结果并不确切,

myClass myObject = JsonConvert.DeserializeObject<myClass>(jsonStr);

1 个答案:

答案 0 :(得分:0)

首先,你需要用一些奇特的正则表达式疯狂来消毒你的JSON(我没有专家,但这似乎有效):

const str = '[\r\n  {\r\n    \"NewsDate\": \"2018-05-05T06:00:00\",\r\n    \"GeoDate\": \"2018-05-02T00:00:00\",\r\n  },{\r\n    \"NewsDate\": \"2018-06-05T06:00:00\",\r\n    \"GeoDate\": \"2018-06-02T00:00:00\",\r\n  }]';

const data = JSON.parse(str.replace(/\s\s+/g, '').replace(/\,(?!\s*?[\{\[\"\'\w])/g, ''));

你的输出中有一些额外的空间,但我认为这可能是一个人工制品,你也有一个尾随的逗号,这使得JSON.parse打了一小撮。

然后你需要提取对象键,你可能想要检查具有唯一键的对象,因此在定义列时将它们设置为默认值:

const table = $('#example').DataTable({
  "columns": Object.keys(data.reduce((r, o) => Object.assign(r, o), {})).map(c => ({
    "title": c,
    "data": c,
    "default": ""
  })),
  "data": data
});

使用了ES6,因此如果您需要定位非常绿浏览器,则可能需要检查polyfill。这是一个有效的example