使用 js/jquery 将 JSON 字符串格式化为文本区域中的可读格式

Format JSON string using js/jquery to readable format in textarea

我有一个包含对象的 js 变量。我正在使用 jquery 将该对象中的数据传递给 html <textarea>。我还通过 JSON.stringify 传递我的变量,所以代码看起来像这样:

$("#textarea1").val(JSON.stringify(myVarData, null, "\t"));

问题是双重的。

  1. <textarea> 中,数据包含在大括号 {} 中,因为它仍在 JSON 中 - 如何在将其发送到 <textarea> 之前删除它们?基本上是纯文本。
  2. 数据格式正确

    { "property":value, 
      "property":value,
      "property":value }
    

如果我有简单的数据,这没问题,但在其中一个属性中,我有一个如下所示的值:

"report_data":"{"subjects":[{"subject_name":"ENGLISH","parent_subject_name":null,"teacher_id":39,"initials":"A.A.F","use_for_grading":true,"marks":{"MID-TERM 1 2018":{"mark":87,"grade_weight":100,"grade":"A"}},"overall_mark":"87","overall_grade":"A","remarks":"Excellent"},{"subject_name":"MATHEMATICS","parent_subject_name":null,"teacher_id":40,"initials":"B.K.K","use_for_grading":true,"marks":{"MID-TERM 1 2018":{"mark":80,"grade_weight":100,"grade":"A"}},"overall_mark":"80","overall_grade":"A","remarks":"Excellent"},

如何将此 value 数据格式化为像上面 (1) 中那样易于阅读的格式?是否可以从value中只选择我想要的?我尝试在 stringify 之后使用 JSON.parse 但得到的结果是 [object Object]

注意 这不是 this 的副本,因为该问题是关于将 对象 复制到文本框.在我的问题的一部分 - 我想要大括号中的数据 - 不再是 JSON。该解决方案提出了我已经在使用的方法。

1) 可以使用javascript substring 方法去掉大括号{}

例如:JSON.stringify(myVarData).substring(1,JSON.stringify(myVarData).length-1)

2) 要在值对象中选择 属性,select 通过父对象解析 属性 然后执行 stringify

例如:打印第一个主题的标记 JSON.stringify(myVarData.report_data.subjects[0].标记)

var a = {"report_data":{"subjects":[{"subject_name":"ENGLISH","parent_subject_name":null,"teacher_id":39,"initials":"A.A.F","use_for_grading":true,"marks":{"MID-TERM 1 2018":{"mark":87,"grade_weight":100,"grade":"A"}},"overall_mark":"87","overall_grade":"A","remarks":"Excellent"},{"subject_name":"MATHEMATICS","parent_subject_name":null,"teacher_id":40,"initials":"B.K.K","use_for_grading":true,"marks":{"MID-TERM 1 2018":{"mark":80,"grade_weight":100,"grade":"A"}},"overall_mark":"80","overall_grade":"A","remarks":"Excellent"}]}}
console.log(JSON.stringify(a).replace(/[\[\]']+/g,'').replace(/[\{\}']+/g,''))
var final = JSON.stringify(a).replace(/[\[\]']+/g,'').replace(/[\{\}']+/g,'');
$("#textarea1").val(JSON.stringify(final, null, "\t"));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<body>
<div id = "textarea1"></div>
</body>
</html>

快速和优化的解决方案可以使用 regular expression

这里甚至不需要循环

随便用,

JSON.stringify(myVarData).replace(/[\[\]']+/g,'').replace(/[\{\}']+/g,'')