AngularJS объект из строки JSON

0

У меня есть объект Angular, который выглядит примерно так (menuItems содержат больше данных, но это не так):

$scope.data = {
   title:'Title',
   place:'Somewhere'
   menuItems: [{
        title: "This is a Title",
        name: "John"},
                {
        title: "Another Title",
        name: "Frank"} ]
};

Я создаю эту переменную $ scope.data со значениями по умолчанию. Они всегда одни и те же. Эти данные используются для заполнения html-страницы с использованием ng-модели. А также вызов ng-repeat для отображения всех элементов меню.

<input class="text form-control" ng-model="data.title"></div>
<div ng-repeat="item in data.menuItems">
   <input class="text form-control" ng-model="item.name"></div>
   ...
</div>

Затем я успешно экспортировал объект данных в строку JSON следующим образом:

$scope.json = angular.toJson($scope.data, false);

Который дает строку JSON, подобную этой:

{"menuItems":[{"title":"This is a title","name":"John"},{"title":"Another Title","name":"Frank"}],"title":"Title", "place":"Somewhere"}

Теперь я хочу загрузить эту строку JSON и перезаписать объект $ scope.data (чтобы предоставить средства для изменения существующей строки JSON).

Я загружаю строку так:

var json = JSON.stringify("{"menuItems":[{"title":"This is a title","name":"John"},{"title":"Another Title","name":"Frank"}],"title":"Title", "place":"Somewhere"}");
$scope.data = JSON.parse(json);

Но данные не обновляются, и все div, созданные в ng-repeat, исчезают.

Я не могу изменить структуру JSON, поскольку он используется таким образом в другом приложении. Есть ли способ достичь того, чего я хочу?

Благодарю.

  • 0
    Вы проверили консоль, чтобы увидеть, есть ли ошибки?
  • 0
    да. без ошибок Строковая строка JSON выглядит также правильно
Показать ещё 2 комментария

2 ответа

0
Лучший ответ

Поскольку вы используете $scope.json = angular.toJson($scope.data, false); способ сделать обратное в угловом будет угловатым. angular.fromJson($scope.json).

Также убедитесь, что ваш JSON действителен. ie "{"menuItems":[{"title":"This is a title","name":"John"},{"title":"Another Title","name":"Frank"}],"title":"Title", "place":"Somewhere"}") выглядит так: ваши внутренние кавычки не экранируются, или вы не используете одиночные кавычки в качестве внешних кавычек.

  • 0
    да. успеха тоже нет.
  • 1
    Это должно быть в разделе комментариев. не ответы
Показать ещё 1 комментарий
0

Вам нужно избегать цитат:

var json = JSON.parse("{\"menuItems\":[{\"title\":\"This is a title\",\"name\":\"John\"},{\"title\":\"Another Title\",\"name\":\"Frank\"}],\"title\":\"Title\", \"place\":\"Somewhere\"}");

Также вы стягиваете строку! JSON.stringify ожидает объект и возвращает строку JSON.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню