我需要找到处理JSON的解决方案
问题描述:
我正在开发一个工具搜索,在输入字段中找到与用户输入的关键字相匹配的JSON。我需要找到处理JSON的解决方案
我正在做关于国家信息的单一API的测试,以及..它的工作原理。
的功能是这样的:
getResults(keyword:string) {
return this.http.get("https://restcountries.eu/rest/v1/name/"+keyword)
.map(result => {return result.json()
.filter(items =>
items.name.toLowerCase().startsWith(keyword.toLowerCase()))
});
}
但我有一个问题..谁即时通讯试图赶上阵列的结构与此类似:
{"status":"OK","items":[{"id":4359,"name":"Cleveland"},
{"id":6855,"name":"Ohio"},{"id":7669,"name":"Seattle"}]}
这不是一个简单的数组,它是一个具有两个属性(项目和状态)的对象,并且项目获得了一个数组,其中存储的对象具有两个属性:id和name。
我可以使用我自己的函数来处理那个JSON吗?
谢谢,对不起,我的英语
编辑:
我想是这样的
getResults(keyword:string){
var headers = new Headers();
headers.append("Access-Control-Allow-Origin", '*');
// headers.append('Content-Type', 'application/json');
let options = new RequestOptions({headers: headers});
return this.http.get("http://newapi.com?q=" + keyword + "&_=" + this.nocache, options)
.map(res => res.json())
.subscribe(
response => {
response.items.map(item => item.name) ;
let ciudades = response.items;
},
error => error => this.onError(error));
答
如果jQuery是一个选项,在这里你去。所有你需要做的就是通过items
阵列迭代与$.each
:
// say the JSON is mapped to a variable called json.
// If you need to parse the JSON, use JSON.parse()
$.each(json.items, function(index, item){
var id = item.id;
var name = item.name;
});
如果你想要一个简单的JavaScript解决方案:
var items = json.items;
for(var i = 0; i < items.length; i++){
var item = items[i];
alert(`ID: ${item.id} | Name: ${item.name}`);
}
答
假设呼叫到json()
返回您的答案描述的JSON,followi ng会为你工作。
function getResults(keyword: string) {
// const response = this.http.get("https://restcountries.eu/rest/v1/name/" + keyword);
return response
.json().items
.filter(item => item.name
.toLowerCase()
.startsWith(keyword.toLowerCase()));
}
我们首先需要访问items
属性。然后我们可以在它返回的数组上返回所有filter
。
Here is a demo它与您的答案描述的JSON一起工作。
const json = `
{"status":"OK","items":[{"id":4359,"name":"Cleveland"},
{ "id": 6855, "name": "Ohio" }, { "id": 7669, "name": "Seattle" }]}`;
const response = {
json:() => JSON.parse(json)
};
function getResults(keyword: string) {
// const response = this.http.get("https://restcountries.eu/rest/v1/name/" + keyword)
return response
.json().items
.filter(item => item.name
.toLowerCase()
.startsWith(keyword.toLowerCase()));
}
const results = getResults("c");
window.alert(JSON.stringify(results)); // [{"id":4359,"name":"Cleveland"}]
是的,我度过了我的*周日与此有关。这不是我的家庭作业,这不是我的工作,我正在学习,但我没有找到任何解决方案 – Specimen
如果您尝试了某些东西 - 将其添加到问题中,其他人将能够看到您尝试过的东西并可能能够解决这些问题。 – Dekel
好的,我下次再做。谢谢 – Specimen