在AngularJs中,以下是有效的 -
$scope.product= {items:[{itemname:'apple',itemdesc:'fruit'}]}
但我想从json字符串中获取$scope.product
,如下所示 -
var strJson = "{items:[{itemname:'apple',itemdesc:'fruit'}]}";
$scope.product=strJson;
无效。我只有一个json字符串,我需要分配给$scope.product
。我使用了JSON.parse()
和JSON.toJson()
,但它们无效。
我不知道自己做错了什么
以下是我的确切代码:
$http.get('/getItems').success(function(data) {
var jsondata="{\items\:";
jsondata+=JSON.stringify(data);
jsondata+="}";
jsondata=jsondata.replace(/"itemname"/g, 'itemname');
jsondata=jsondata.replace(/"itemdesc"/g, 'itemdesc');
// WORKING CODE
$scope.product = {items:[{itemname:"apple",itemdesc:"fruit"}]};
// NOT WORKING CODE
var jsonObj = jsondata;
$scope.product = jsonObj;
});
答案 0 :(得分:4)
JSON standard期望值围绕双引号。所以你的JSON字符串是不可解析的JSON。
var mystr = '{"items": [{"itemname": "apple","itemdesc": "fruit"}]}';
console.log(JSON.parse(mystr))
console.log(typeof JSON.parse(mystr))

答案 1 :(得分:1)
这是问题所在。显然,如果您使用JSON.parse将JSON字符串转换为JSON,那么您的属性名称应该用双引号而不是单引号括起来。
angular.module("app",[])
.controller("ctrl",function($scope){
$scope.product= '{"items":[{"itemname":"apple","itemdesc":"fruit"}]}'
$scope.product = JSON.parse($scope.product);
console.log($scope.product)
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
</div>
答案 2 :(得分:0)
您可以使用JSON.parse,找到以下答案
var strJson = JSON.parse("{items:[{itemname:'apple',itemdesc:'fruit'}]}")
;
答案 3 :(得分:0)
我建议使用角度方式将json转换为对象:
$scope.product= "{items:[{itemname:'apple',itemdesc:'fruit'}]}";
$scope.product = angular.fromJson($scope.product);
反对json如下:
var strJson = angular.toJson($scope.product);
答案 4 :(得分:0)
我认为你的字符串格式不正确,应该是这样的。
var str = '{"items":[{"itemname":"apple","itemdesc":"fruit"}]}';
$scope.product = JSON.parse(str)
答案 5 :(得分:0)
请在JSON中使用双引号(通过转义它们)。然后JSON.parse()将适当地接受输入字符串并正确解析。同时删除方括号。
$scope.jsonString = "{\"items\":{\"itemname\":\"apple\",\"itemdesc\":\"fruit\"}}";
var test = JSON.parse($scope.jsonString);
在旁注上您还可以使用JSON Lint来检查您的JSON是否有效。
如果有帮助,请告诉我。