我有一个Json字符串,我需要创建一个带有来自该json字符串的头的数据表。(并且还需要删除转义字符)
[\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);
答案 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。