应用于JSON字符串时angular.fromJson和$ scope$ eval之间的区别

【字号: 日期:2024-04-10浏览:44作者:雯心
(adsbygoogle = window.adsbygoogle || []).push({}); 如何解决应用于JSON字符串时angular.fromJson和$ scope$ eval之间的区别?

查看源代码:

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函数。

解决方法

在我的angularjs应用中,我通常使用来解析JSON字符串angular.fromJson,如下所示:

var myObject=angular.fromJSON(jsonString);

但是,似乎可以通过使用$scope.$eval以下命令获得相同的结果:

var myObject=$scope.$eval(jsonString);

看到这个小提琴

或使用香草javaScript,如下所示:

var myObject=JSON.parse(jsonString);

有什么特别的理由要使用angular.fromJSON而不是JSON.parse?

$scope.$eval用于解析JSON字符串时是否存在任何问题?

相关文章: