Отформатируйте строку JSON, используя js/jquery, в удобочитаемый формат в текстовой области

У меня есть переменная js, содержащая объект. Я передаю данные этого объекта в html <textarea> с помощью jquery. Я также передаю свою переменную через 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 только то, что я хочу? Я пытался использовать JSON.parse после stringify, но в результате получил [object Object].

ПРИМЕЧАНИЕ Это не дубликат этого поскольку этот вопрос касается копирования объекта в текстовое поле. В первой части моего вопроса - я хочу, чтобы данные были вне фигурных скобок - это больше не JSON. И это решение предлагает то, что я уже использую.


person Clint_A    schedule 10.04.2018    source источник
comment
Возможный дубликат префиксировать данные json во вводе textarea   -  person 31piy    schedule 10.04.2018
comment
JSON.parse — получить объект JS из строки JSON.   -  person Edwin Chua    schedule 10.04.2018
comment
@ 31piy это не дубликат, так как в решении этого вопроса используется stringify и отступ на stringify, который я уже использую в своем вопросе. И это относится к удалению фигурных скобок.   -  person Clint_A    schedule 10.04.2018
comment
@Clint_A -- в комментарии написано возможен дубликат. Если другие найдут его точную копию, они также проголосуют за закрытие этого вопроса. Иначе кто-нибудь ответит.   -  person 31piy    schedule 10.04.2018
comment
github.com/google/code-prettify   -  person Sam Axe    schedule 10.04.2018
comment
что именно вы хотите отобразить в текстовой области   -  person Sravan    schedule 10.04.2018
comment
@Sravan Я хочу, чтобы данные JSON представляли собой форматированный обычный текст в текстовой области. Я уже решил первую часть своего вопроса или удалил фигурные скобки, используя ответ, данный DT Teja ниже. Теперь я пытаюсь отформатировать значение, которое имеет массив значений (часть 2 вопроса)   -  person Clint_A    schedule 10.04.2018
comment
formAT значение означает, что вам также нужно удалить все фигурные скобки из массива?   -  person Sravan    schedule 10.04.2018
comment
@Sravan Да, я хочу удалить все фигурные скобки из массива.   -  person Clint_A    schedule 10.04.2018


Ответы (2)


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,'')

person Sravan    schedule 10.04.2018
comment
Спасибо. Это собственно то, что мне было нужно в моем квесте - person Clint_A; 10.04.2018
comment
рад помочь вам. :) - person Sravan; 10.04.2018

1) Вы можете использовать метод подстроки javascript для удаления фигурных скобок {}

например: JSON.stringify(myVarData).substring(1,JSON.stringify(myVarData).length-1)

2) Чтобы выбрать свойство в объекте значения, выберите свойство, проанализировав родительский объект, а затем выполните строку.

например: для печати меток первой темы JSON.stringify(myVarData.report_data.subjects[0].marks)

person Dt Teja    schedule 10.04.2018
comment
Спасибо. Часть 1 вашего ответа решила мою первую проблему. Я проверю вторую часть, используя цикл for, так как я не хочу жестко кодировать то, что хочу выбрать, поскольку количество субъектов варьируется. - person Clint_A; 10.04.2018