2017-07-17 67 views
0

我有点新反应原生(和一般的JavaScript)。在按下按钮时,我想要搜索某个键(在本例中为电影)的json api。检查json是否包含反应本机中的密钥

例如,继承人的API https://facebook.github.io/react-native/movies.json

现在在按下按钮,我要检查,如果API包含了一个名为“黑客帝国”的电影。

的网络教程指出,以获取JSON,你需要下面的方法:

function getMoviesFromApiAsync() { 
return fetch('https://facebook.github.io/react-native/movies.json') 
    .then((response) => response.json()) 
    .then((responseJson) => { 
    return responseJson.movies; 
    }) 
    .catch((error) => { 
    console.error(error); 
    }); 

}

这将返回一个JSON对象,但如何将一个查询这个对象来检查它是否包含例如名为“The Matrix”的电影?

任何帮助将不胜感激。

回答

1

你会做什么是JSON响应使用Array.prototype.find()电影阵列和检查值

function getMoviesFromApiAsync() { 

    return fetch('https://facebook.github.io/react-native/movies.json') 
     .then((response) => response.json()) 
     .then((responseJson) => { 
     return responseJson.movies; 
     }) 
     .catch((error) => { 
     console.error(error); 
     }); 
    } 

    //from where you are calling getMovies 
    getMoviesFromApiAsync() 
     .then(response => { 
       var data = response.find((movie) => 
        movie.title.toUpperCase().indexOf('THE MATRIX') > -1 
      ) 
       console.log(data) 
       if(data) { 
        console.log('found'); 
       } 
     }) 

其他选项使用

Array.prototype.some()

var data = response.some((movie) => movie.title.toUpperCase().indexOf('THE MATRIX') > -1) 

Array.prototype.filter()

var data = response.filter((movie) => movie.title.toUpperCase().indexOf('THE MATRIX') > -1) 
+0

不应该检查indexOf'> -1'吗? – RRikesh

+0

@RRikesh,谢谢你指出,刚刚更新了答案 –

+0

@ShubhamKhatri酷,非常感谢,它的作品:)。还有一个问题。当我单击按钮时,如何显示显示json对象名称的警报,而不是记录到控制台?警报在该方法中似乎不起作用。 – Razor88