2016-04-22 98 views
0

对象我有一个角度对象,看起来像这样(的菜单项包含更多的数据,但是那不是点):AngularJS从JSON字符串

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

我创建这个$ scope.data默认值。他们总是一样的。这些数据用于使用ng-model填充html页面。以及ng-repeat调用来显示所有menuItem。

<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-重复消失。

我无法更改JSON的结构,因为它在另一个应用程序中以这种方式使用。有没有办法实现我想要的?

谢谢。

+0

你检查了控制台,看看是否有任何错误? –

+0

是的。没有错误。字符串化的json字符串似乎也是正确的 – Androidicus

+0

'“{”menuItems“:[{”title“:”这是一个标题“,”name“:”John“},{”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

这应该在评论部分。没有回答 – 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\"}"); 

你也是字符串化字符串! JSON.stringify需要对象并返回JSON字符串。