【问题标题】:Unable to get values from JSON response in NodeJS无法从 NodeJS 中的 JSON 响应中获取值
【发布时间】:2017-04-12 17:04:27
【问题描述】:

我正在尝试检查从查询返回的值。此结果为 JSON 格式。我的代码工作,直到我的条件语句。
在调试时我发现我的条件语句总是失败,因为我试图从 JSON 检索和比较的值总是未定义。

var promise = insertDataInMongo([body, token]);
var newBody = JSON.parse(body);

if (newBody.paging.facebookPost !== -1 || newBody.paging.youtube !== -1 || newBody.paging.twitter !== -1 || newBody.paging.facebook !== -1 || newBody.paging.reddit !== -1 || newBody.paging.youtubeComment !== -1 || newBody.paging.news !== -1)
    promise.then(getAthleteMedia([athlete, token, newBody.paging.facebook, newBody.paging.facebookPost, newBody.paging.reddit, newBody.paging.youtube, newBody.paging.youtubeComment, newBody.paging.twitter, newBody.paging.news]))

返回的正文如下所示:

{ "paging": [
{
  "youtubeComment": -1
},
{
  "youtube": -1
},
{
  "twitter": -1
},
{
  "facebook": -1
},
{
  "reddit": -1
},
{
  "facebookPost": -1
},
{
  "news": -1
}
]}

调试时,我看到以下内容:

JSON Values

但是,解析值显示为:

Parsed values

非常感谢任何帮助。谢谢,

【问题讨论】:

    标签: json node.js mongodb


    【解决方案1】:

    您收到的是对象数组而不是对象的对象,因此您应该先使用索引然后使用属性访问它们。 假设 JSON 响应的格式始终相同,这里是有效的JSfiddle 链接,下面是受How to get index of object by its property in javascript 帖子的answer 启发的示例代码。

    var newBody = {
      "paging": [{
        "youtubeComment": -1
      }, {
        "youtube": -1
      }, {
        "twitter": -1
      }, {
        "facebook": -1
      }, {
        "reddit": -1
      }, {
        "facebookPost": -1
      }, {
        "news": -1
      }]
    };
    
    
    function check(array, attr, value) {
      for (var i = 0; i < array.length; i += 1) {
        if (array[i][attr] === value) {
          return false;
        }
      }
      return true;
    }
    
    function get_value(array, attr) {
      for (var i = 0; i < array.length; i += 1) {
        if (array[i].hasOwnProperty(attr)) {
          return array[i][attr];
        }
      }
    }
    
    if (check(newBody.paging, "facebook", -1) || check(newBody.paging, "youtubeComment", -1) || check(newBody.paging, "youtube", -1) || check(newBody.paging, "twitter", -1) || check(newBody.paging, "reddit", -1) || check(newBody.paging, "facebookPost", -1) || check(newBody.paging, "news", -1)) {
      // promise.then(getAthleteMedia([athlete, token, get_value(newBody.paging, "facebook"), ... get_value(newBody.paging, "news")]));
      // similarly just pass the function in your promise, hope it clears how to get the values as well
      console.log(get_value(newBody.paging, "facebook"));
    
    } else console.log("not in if");

    【讨论】:

    • 对不起.. 我遗漏了一些东西,您发布的内容与我最初发布的内容有何不同?
    • 抱歉我错过了更新索引,请重新检查更新为jsfiddle.net/44fakLh7/1的jsfiddle链接
    • 好的..我也怀疑过,并在早些时候尝试过。但我发现,返回数组中的对象序列并不总是相同的。所以我无法对索引进行硬编码。
    • JSON 响应的格式并不总是相同,因此会出现问题。
    • 谢谢你 Warl0ck 会工作的!现在我的下一步是弄清楚如何从这个数组(非-1)中获取值并将其设置为我在 IF 条件内调用的函数。 promise.then(getAthleteMedia([运动员,令牌,newBody.paging.facebook,newBody.paging.facebookPost,newBody.paging.reddit,newBody.paging.youtube,newBody.paging.youtubeComment,newBody.paging.twitter,newBody.paging .news]))
    猜你喜欢
    • 2021-11-26
    • 2022-01-11
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多