在我的angularjs应用中,我通常使用来解析JSON字符串angular.fromJson,如下所示:
angular.fromJson
var myObject=angular.fromJSON(jsonString);
但是,似乎可以通过使用$scope.$eval以下命令获得相同的结果:
$scope.$eval
var myObject=$scope.$eval(jsonString);
看到这个小提琴
或使用香草javaScript,如下所示:
var myObject=JSON.parse(jsonString);
有什么特别的理由要使用angular.fromJSON而不是JSON.parse?
angular.fromJSON
JSON.parse
$scope.$eval用于解析JSON字符串时是否存在任何问题?
查看源代码:
function fromJson(json) { return isString(json) ? JSON.parse(json) : json; }
他们只是通过JSON.parse。
至于$ eval它炮轰到$ parse:
// $scope.$eval source: $eval: function(expr, locals) { return $parse(expr)(this, locals); },
$ parse source太长,无法发布,但是它本质上能够将内联(字符串化)对象转换为 真实 对象,因此在这种情况下,它实际上也会转换JSON是有意义的。
(直到刚刚阅读完$ parse的源代码,我才知道这一点。)
有什么特殊的原因要使用angular.fromJSON而不是JSON.parse吗?
不,不是这样。尽管它们确实会检查您以确保您不对JSON字符串进行双重解析,如下所示:
var jsonString = '{"foo":"bar"}'; var json = JSON.parse(jsonString); // Parsing once is good :) JSON.parse(json); // Parsing twice is bad :(
使用$ scope。$ eval解析JSON字符串时是否有任何可能的问题?
我不认为这超出了我的头脑,除了您所做的工作超出了必要。因此,如果您知道拥有JSON,则没有理由使用较重的$ parse函数。