将嵌套的 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字符串转换为Java嵌套对象的方法

做一次面向对象的体操:将 JSON 字符串转换为嵌套对象的一种方法

将嵌套的JSON密钥转换为UPPERCASE

Flutter 从 Json 转换嵌套对象返回 null

postgresql中的Rails json列不接受任何值,并在存储后调用时返回nil

如何将嵌套的 JSON 对象转换为数组 Spring Boot?