Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从JSON对象中提取多个hashtag?_Javascript_Json - Fatal编程技术网

Javascript 如何从JSON对象中提取多个hashtag?

Javascript 如何从JSON对象中提取多个hashtag?,javascript,json,Javascript,Json,我试图从下面的JSON对象中提取“动物”和“鱼”标签。我知道如何提取名为“animal”的第一个实例,但我不知道如何提取这两个实例。我想用一个循环,但不确定从哪里开始。请告知 data = '{"hashtags":[{"text":"animal","indices":[5110,1521]}, {"text":"Fish","indices":[122,142]}],"symbols":[],"user_mentions": [{"screen_name":"

我试图从下面的JSON对象中提取“动物”和“鱼”标签。我知道如何提取名为“animal”的第一个实例,但我不知道如何提取这两个实例。我想用一个循环,但不确定从哪里开始。请告知

data = '{"hashtags":[{"text":"animal","indices":[5110,1521]},
        {"text":"Fish","indices":[122,142]}],"symbols":[],"user_mentions":
        [{"screen_name":"test241","name":"Test 
        Dude","id":4999095,"id_str":"489996095","indices":[30,1111]},
        {"screen_name":"test","name":"test","id":11999991,
        "id_str":"1999990", "indices":[11,11]}],"urls":[]}'; 

function showHashtag(data){
   i = 0;
   obj = JSON.parse(data); 
   console.log(obj.hashtags[i].text);
}

showHashtag(data);
使用:

let data={“hashtags”:[{“text”:“animal”,“index”:[51101521],{“text”:“Fish”,“index”:[122142],“symbols”:[],“user_提及”:[{“screen_name”:“test241”,“name”:“Test Dude”,“id”:499995,“id_str”:“489996095”,“index”:[301111],{“screen_name”:“Test”,“Test”,“id”:1199991”,“id_str”:“199990”,“index”:[11,11],“url[}';
函数showHashtag(数据){
返回JSON.parse(data).hashtags.filter(e=>/animal | fish/i.test(e.text))
}
log(showHashtag(数据))对我来说,在这里非常有用,它在集合方面有不同的功能。对于您的情况,我将使用
函数帮助检查数组,并获取任何带有作为第二个参数传入的creteria的标记,如下所示:

.find(集合,[predicate=.identity],[fromIndex=0]) 源npm包

迭代集合的元素,返回第一个元素 谓词返回truthy for。谓词由三个参数调用 参数:(值、索引|键、集合)

就你的情况而言,这应该行得通

var data = '{ "hashtags": [ { "text": "animal", "indices": [ 5110, 1521 ] }, { "text": "Fish", "indices": [ 122, 142 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "test241", "name": "Test \n Dude", "id": 4999095, "id_str": "489996095", "indices": [ 30, 1111 ] }, { "screen_name": "test", "name": "test", "id": 11999991, "id_str": "1999990", "indices": [ 11, 11 ] } ], "urls": [] }'; 

var obj = JSON.parse(data); 


_.find(obj.hashtags, { 'text': 'animal' });
// => { "text": "animal", "indices": [ 5110, 1521 ] }

对于像这样的简单解析,我将使用普通的
obj.forEach()
方法,它更可读,更容易理解,特别是对于javascript初学者

obj = JSON.parse(data).hashtags;
obj.forEach(function(element) {
  console.log(element['text']);
});

filter
方法的简短解释可能很好,因为OP似乎对javascript不太熟悉。@baao感谢您的建议和回答,但我只想提取和打印文本,即[“动物”、“鱼”]。我可以用filter来做这个吗?添加了@jr134。但是为什么要搜索它呢?是否只希望对象具有
text
属性@jr134@baao我在这里学到了很多,但我忘了提到的是,我有多个像这样的对象,它们有不同的hashtag,我不认为过滤器可以使用。对于我最初的解释,我深表歉意,因为我没有概述这一点。javascript中是否有
.find
函数?哦,不,这是lodash库中的一个函数,它为操作对象、数组等提供了不同的空间,但仍然
.find()
只返回第一个合适的匹配项。而OP希望返回多个元素,并进一步使用一个简单的
obj.hashtags.find(elem=>elem.text==='animal')
提供与lodash解决方案相同的结果,并且不需要任何额外的第三方库…
在这种情况下可以做得很好,不要弄错,这只是一种使代码更整洁的方法,而不必做所有这些@丹尼尔