【问题标题】:How do I access a dynamic property of a JSON object? (Node.js)如何访问 JSON 对象的动态属性? (Node.js)
【发布时间】:2016-10-13 03:19:15
【问题描述】:

我确信类似的问题已经被问过并回答了很多次,但我想我没有正确地措辞这个问题,因为我还没有找到任何适合我的答案。

我正在使用 Node 发送 API 请求并将数据返回到我的 Angular 应用程序中:

app.get('/personInfo/:personName', function(req,res){

    Module.Person.getByName(req.params.personName)
    .then(function (person) {
        res.json(person);
    });
});

应用程序通过以下脚本包含响应:

$scope.submit = function(){
    $http.get('/personInfo/' + $scope.person.name).success(function(response){
        console.log(response);
    });
};

($scope.person 链接到我的 .html 文件的某些字段,它似乎工作正常)

我要找回来了(假设我通过 $scope.person.name 传递了 johnny)

johnny:Object
__proto__:Object

第一个对象包含我想要的数据......所以我不能直接访问它的属性。

我无法对此执行简单的response.id, response.name, response.profileIconId 等...我必须像这样访问它:

response.johnny.property ...显然...

我做错了什么?是否可以在服务器级别或客户端级别使用某种形式的格式化或解析,这样我就可以直接访问对象的属性而无需指定动态父对象?

【问题讨论】:

  • $http.get('/personInfo/' + $scope.person.name) 是危险的,因为当人名包含 URL 特殊字符时,它可能会(最好的情况)或注入攻击的风险(最好的情况)或注入攻击。 始终正确编码数据。在这种情况下,请使用encodeURIComponentI()
  • encodeURIComponent()?我在这些脚本中更改了很多东西以保持简单。但我以前不知道,我很感激。
  • 检查服务器端代码并​​查看person 对象是否包含类似johny:{...} 的内容。这可能是您收到您所描述的响应的原因
  • @VikashKesarwani 当我登录人时,我只是得到 [object Object] - 我应该访问某些属性吗?
  • @BarryD。登录JSON.stringify(person),它会打印出这个人的字符串表示,然后你就可以验证结构了。

标签: json node.js api parsing


【解决方案1】:

好的,所以这似乎工作......

我通过测试发现 person.x (x = the personName param) 完全按照我想要的方式返回对象 - 所以我每次都需要做 person.personName ,所以因为我不知道名字,只需传入与参数匹配的未知属性,它就可以工作!

res.json(人[req.params.personName]);

返回: Object {id: 19897772, name: "Johnny", profile: 937, rank: 12, revisionDate: 1463522178000}

我现在可以response.id,name,profile etc. ...

【讨论】:

  • 很好,但如果您编辑 Module.Person.getByName() 以返回数据[personName],您的代码会更干净
  • Module 表示一个在后台连接到 API 的模块,因此我直接使用了文档中的代码 - 但我会考虑这一点,谢谢。
猜你喜欢
  • 2011-01-18
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
  • 2011-08-10
  • 2019-09-01
  • 1970-01-01
  • 2013-07-21
相关资源
最近更新 更多