我有一个JSON对象
{scope:{results:{...}}}
我有一个名为
的字符串"data.one.url"
现在我想在JSON对象中设置值。通常我会这样做:
scope.results.data.one.url = "hello";
但是当我只有上面提到的字符串时怎么办呢?
答案 0 :(得分:1)
这是数据结构:
myData = {scope:{results:{data:{one:{url:"The url"}}}}}
定义基础。您的字符串访问路径与此相关:
var base = myData.scope.results;
以及通过路径访问的功能:
function getIn(base, path) {
var components = path.split(".");
var current = base;
for (var i = 0; i < components.length; i++) {
current = current[components[i]];
}
return current;
}
使用它:
getIn(base, "data.one.url")
>>> "The url"
或者相对于根:
getIn(myData, "scope.results.data.one.url")
>>> "The url"
当然需要更多的错误处理,以使其对您不期望的路径具有鲁棒性。
答案 1 :(得分:1)
在这种情况下最简单和最方便的方法(因为您使用的是AngularJS)是使用$parse
服务:
var str = 'data.one.url';
var url = $parse('results.' + str)($scope); // "hello"
演示: http://plnkr.co/edit/NYLvWc1gOA5X3glIM1gI?p=preview
Angular在内部使用$parse
服务来完成这类事情。当您使用HTML {{someobj.prop.name}}
撰写时,在someobj.prop.name
服务的帮助下,字符$scope
将被$parse
解释。如果你愿意,你可以自己使用它是非常酷的。只需确保将服务注入您的控制器。
答案 2 :(得分:-2)
这个怎么样(如果我搞定的话)?
var myJSON = {scope:{results:{...}}}
myJSON["scope"]["results"]["url"] = data.one.url
myJSON = JSON.Stringify(myJSON);
然后你将这个对象作为JSON: &#34; {范围:{结果:{URL {值}}}}&#34;