【问题标题】:Filter Json Using Javascript使用 Javascript 过滤 Json
【发布时间】:2016-01-20 18:39:38
【问题描述】:

你好,你能帮我过滤一下这样的 Json 对象吗:

{
    "data": {
        "statuses": [{
            "entities": {
                "urls": [],
                "user_mentions": [{
                    "screen_name": "name1"
                }]
            },
            "entities": {
                "urls": [],
                "user_mentions": [{
                    "screen_name": "name2"
                }]
            },
            "entities": {
                "urls": [],
                "user_mentions": [{
                    "screen_name": "name3"
                }]
            }
        }]
    }
}

我需要获取包含每个键 screen_name 的值的数组。 例如:array = ["name1","name2","name3"] 如果没有只有 JS 的框架,我怎么能做到?

感谢您的帮助。我已将 Json 更新为这样:

var obj = {
"data": {
    "statuses": [{
        "urls": [],
        "user_mentions": [{
            "indices": [
                3,
                16
            ],
            "id_str": "626444770",
            "id": 626444770,
            "name": "katheryn",
            "screen_name": "sella_sandra"
        }, {
            "indices": [
                "***",
                "***"
            ],
            "id_str": "21447363",
            "id": 21447363,
            "name": "KATY PERRY",
            "screen_name": "katyperry"
        }, {
            "indices": [
                "***",
                "***"
            ],
            "id_str": "21447363",
            "id": 21447363,
            "name": "KATY PERRY",
            "screen_name": "floyd"
        }]
    }]
}

我想要获取 screen_names 的数组。我写了这样的代码。但是当我使用时。它在这里不起作用:

console.log (statuses[0].user_mentions[i].screen_name) 我不是愚蠢的错误,但我不知道这有多正确。帮助伙计们!

var statuses = obj.data.statuses;
for (var i=0; i<statuses.length; i++ )

 { if ( typeof statuses[0].user_mentions !== "undefined")
            {    
               for (var i=0; i<statuses.length; i++){
                  console.log (statuses[0].user_mentions[i].screen_name);
            }
        } 

    else console.log ="No senders";
}

【问题讨论】:

标签: javascript arrays json filter


【解决方案1】:

您的语法不正确,因为在 statuses 数组中您不能有其他键值数据。

删除 entities 键名,假设它只是一个对象数组,然后试试这个

var obj = { "data": {
  "statuses": [
    {
      "urls": [],
      "user_mentions": [{
        "screen_name": "name1"
      }]
    },
    {  
      "urls": [],
      "user_mentions": [{
        "screen_name": "name2"
      }]
    },
    {  
      "urls": [],
      "user_mentions": [{
        "screen_name": "name3"
      }]
    }
  ]
} };

var statuses = obj.data.statuses;
var names = [];
for (var counter = 0; counter < statuses.length; counter++ )
{
   names.push( statuses[ counter ].user_mentions[0].screen_name ); 
}
console.log( names );

【讨论】:

  • 这不是有效的语法。
  • 数组“状态”有很多键,不仅是“实体”。我写了这样的方式来展示我需要的东西,但是数组可以包含更多的键。
  • @frostrock 数组不能有键,数组只能有项目。请通过在控制台上运行它来检查您的阵列并进行更正。
  • @gurvinder372 你不能像以前那样启动一个对象。在控制台中运行你的代码,你会看到一个语法错误。此外,您可以轻松地验证 JSON using this tool
  • 我如何请求 user_mentions[0]?因为当我使用console.log(statuses.user_mentions [0])时,我得到响应:无法读取未定义的属性'0'
【解决方案2】:

鉴于您更新的数据对象,这将返回一个 screen_names 数组(删除了所有重复项。如果您想保留重复项,请将 names 声明为一个数组并推送给它。)我使用了一种相对冗长的编码风格来更容易看到发生了什么。

var obj = {
    "data": {
        "statuses": [{
            "urls": [],
            "user_mentions": [{
                "indices": [3,16],
                "id_str": "626444770",
                "id": 626444770,
                "name": "katheryn",
                "screen_name": "sella_sandra"
            }, {
                "indices": ["***","***"],
                "id_str": "21447363",
                "id": 21447363,
                "name": "KATY PERRY",
                "screen_name": "katyperry"
            }, {
                "indices": ["***","***"],
                "id_str": "21447363",
                "id": 21447363,
                "name": "KATY PERRY",
                "screen_name": "floyd"
            }]
        }]
    }
};

var names = {};
for (var i=0; i<obj.data.statuses.length; i++) {
  if (obj.data.statuses[i]["user_mentions"]) {
    var mentions = obj.data.statuses[i]["user_mentions"];
    for (var j=0; j<mentions.length;j++) {
      if (mentions[j]["screen_name"]) {
        names[mentions[j]["screen_name"]] = 1;
      }
    }
  }
}

var arrayOfScreenNames = Object.keys(names);
console.log(arrayOfScreenNames);

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 2021-08-26
    • 2022-01-03
    • 1970-01-01
    • 2016-01-18
    • 2019-03-25
    • 2015-11-01
    • 2021-03-03
    • 1970-01-01
    相关资源
    最近更新 更多