Вывод строки JSON формата AngularJS

У меня есть приложение AngularJS, которое собирает данные из ввода, преобразует модель в строку с помощью JSON.stringify() и позволяет пользователю редактировать эту модель таким образом, что поля ввода обновляются, если элемент <textarea> обновлен и наоборот. Какой-то двухсторонний привязкой:)

Проблема в том, что сама строка выглядит уродливой, и я хотел бы отформатировать ее так, чтобы она выглядела следующим образом:

enter image description here

И теперь не выглядит так:

enter image description here

Любые идеи, как это можно выполнить? Если вам нужна дополнительная информация - не стесняйтесь спрашивать. Каждый ответ получил высокую оценку и ответил на него.

Спасибо.

P.S. Я предполагаю, что это должна быть какая-то директива или настраиваемый фильтр. Сами данные НЕ ДОЛЖНЫ быть изменены, только выход.

Ответ 1

Вы можете использовать необязательный параметр JSON.stringify()

JSON.stringify(value[, replacer [, space]])

Параметры

  • value Значение для преобразования в строку JSON.
  • replacer Если функция, преобразует значения и свойства, возникающие при стягивании; если array, задает набор свойств, включенных в объекты в конечная строка. Подробное описание функции замены выполняется приведенный в статье руководства javaScript. Использование встроенного JSON.
  • пространство Заставляет результирующую строку быть напечатанной.

Например:

JSON.stringify({a:1,b:2,c:{d:3, e:4}},null,"    ")

даст вам следующий результат:

"{
    "a": 1,
    "b": 2,
    "c": {
        "d": 3,
        "e": 4
    }
}"

Ответ 2

Angular имеет встроенный filter для отображения JSON

<pre>{{data | json}}</pre>

Обратите внимание на использование pre -tag для сохранения пробелов и строк

Демо:

angular.module('app', [])
  .controller('Ctrl', ['$scope',
    function($scope) {

      $scope.data = {
        a: 1,
        b: 2,
        c: {
          d: "3"
        },
      };

    }
  ]);
<!DOCTYPE html>
<html ng-app="app">

  <head>
    <script data-require="[email protected]" data-semver="1.2.15" src="//code.angularjs.org/1.2.15/angular.js"></script>
  </head>

  <body ng-controller="Ctrl">
    <pre>{{data | json}}</pre>
  </body>

</html>

Ответ 3

Если вы хотите отображать JSON как HTML и его можно развернуть/открыть, вы можете использовать эту директиву, которую я только что сделал, чтобы сделать ее красивой:

https://github.com/mohsen1/json-formatter/

enter image description here

Ответ 4

В дополнение к уже отмеченному angular json фильтру, также есть angular toJson() функции.

angular.toJson(obj, pretty);

Второй параметр этой функции позволяет вам довольно широко печатать и устанавливать количество используемых пробелов.

Если установлено значение true, вывод JSON будет содержать символы новой строки и пробелы. Если задано целое число, вывод JSON будет содержать это много пробелов для отступов.

(по умолчанию: 2)

Ответ 5

Если вы хотите отформатировать JSON, а также выделить подсветку синтаксиса, вы можете использовать директиву ng-prettyjson. См. пакет npm.

Вот как его использовать: <pre pretty-json="jsonObject"></pre>

Ответ 6

Я думаю, вы хотите использовать для редактирования json-текста. Затем вы можете использовать путь ivarni:   

{{data | json}}
и добавьте атрибут adition, чтобы сделать
 editable

<pre contenteditable="true">{{data | json}}</pre>

Надеюсь, это поможет вам.