2016-04-22 3 views
0

У меня есть Угловое объект, который выглядит примерно так (MenuItems содержит больше данных, но тот не точку):AngularJS объект из JSON строки

$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); 

Но никаких данных не обновляются и все дивы созданы в нг-повторить исчезают.

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

Спасибо.

+0

Вы проверили консоль, чтобы увидеть, есть ли какие-либо ошибки? –

+0

есть. нет ошибок. Строковая строка json также является правильной, а также – Androidicus

+0

'" {"menuItems": [{"title": "Это заголовок", "name": "John"}, {"title": "Another Title", "Another Title" «name»: «Frank»}], «title»: «Title», «place»: «Somewhere»} »)' Вы уверены, что это действительно JSON? Похоже, что внутренние кавычки не экранируются/внешние кавычки не отличаются от внутренних. – DrinkBird

ответ

0

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

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

+0

есть. никакого успеха. – Androidicus

+1

Это должно быть в разделе комментариев. not Answers – Venugopal

+1

Спасибо, я перефразировал его. – DrinkBird

0

Вы должны экранировать кавычки:

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

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

Смежные вопросы