将嵌套的 Json 字符串转换为对象并在 Jquery 数据表单元格中呈现
Posted
技术标签:
【中文标题】将嵌套的 Json 字符串转换为对象并在 Jquery 数据表单元格中呈现【英文标题】:Convert nested Json string to object and render in Jquery datatable cell 【发布时间】:2020-12-28 07:46:39 【问题描述】:我想将 Json 字符串转换为对象并在 JQuery 数据表单元格中呈现它的特定值。我为此尝试了几个小时,但未能实现。
Json 示例
[
"id":1, "Error": "Name missing in datatable",
"id":2, "Error": "\"ErrorType\": \"401\", \"InnerException\":\"Invalid request, Please correct and submit\""
]
首先我想检查 Error 是普通字符串还是 json 字符串,是否显示正常字符串以及 json 字符串是否将其转换为 json 对象并渲染 InnerException进入数据表单元格。我尝试了以下代码,但没有得到正确的结果。
我的代码示例
var RespTable = $('#dtResponse').DataTable(
data: dataList,
columns: [
"title": "ID", "data": "id", "defaultContent": "",
"title": "Error Message",
"data": "Error",
"defaultContent": "",
"render": function (data, type)
var obj = JSON.parse(data)
if (obj != undefined)
return obj.InnerException;
else
return data
]
);
【问题讨论】:
【参考方案1】:我认为你很接近。如果您可以依赖包含“InnerException”的文本(当然,如果存在内部异常),那么您可以执行以下操作:
<script type="text/javascript">
let dataList = [
"id": 1,
"Error": "Name missing in datatable"
,
"id": 2,
"Error": "\"ErrorType\": \"401\", \"InnerException\":\"Invalid request, Please correct and submit\""
];
$(document).ready(function()
let RespTable = $('#dtResponse').DataTable(
data: dataList,
columns: [
"title": "ID", "data": "id", "defaultContent": "",
"title": "Error Message", "data": "Error", "defaultContent": "",
"render": function (data, type)
if ( data.includes("InnerException") )
let innerJson = JSON.parse(data);
//console.log(innerJson);
return innerJson.InnerException;
else
return data;
]
);
);
</script>
这里使用data.includes("InnerException")
作为测试,看看是否可以将字符串解析为JSON。
最终结果:
更新
更严谨的做法是添加这样的函数:
function IsJsonString(str)
try
JSON.parse(str);
catch (e)
return false;
return true;
然后我们可以用这个替换我们的字符串测试:
if ( IsJsonString(data) ) ...
【讨论】:
如果错误字符串包含 InnerException 作为单词怎么办?像“错误”:“数据表中缺少名称,有关更多详细信息,请参见 InnerException” 如果没有安全的字符串测试,那么是的——这不是一个合适的方法。 我添加了一个可以用作 JSON 测试器的函数。 如果这些选项不合适(字符串检查和 try/catch),我认为this question 有更多方法可以调查。 我不知道使用这样的函数是有效的方法,否则它会在所有情况下都有效,但它对我有用。以上是关于将嵌套的 Json 字符串转换为对象并在 Jquery 数据表单元格中呈现的主要内容,如果未能解决你的问题,请参考以下文章
做一次面向对象的体操:将 JSON 字符串转换为嵌套对象的一种方法