我需要找到处理JSON的解决方案

我需要找到处理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)); 
+1

是的,我度过了我的*周日与此有关。这不是我的家庭作业,这不是我的工作,我正在学习,但我没有找到任何解决方案 – Specimen

+0

如果您尝试了某些东西 - 将其添加到问题中,其他人将能够看到您尝试过的东西并可能能够解决这些问题。 – Dekel

+0

好的,我下次再做。谢谢 – Specimen

更改这条线在原始代码:

.map(result => {return result.json()) 

要:

.map(res => res.json().items) 
+0

非常感谢..这实际上适用于我。我无法相信我花了4个小时试图找到解决方案。叹息 – Specimen

+0

Beetlejuice我有另一个提示..当我寻找一个省份时,我怎么能知道与该省有关的身份证号码?我正在做角/离子和我漂亮的小白菜。我需要找到一个解决方案来创建某种搜索栏来选择该数组的省份,并保持ID相关..我需要另一个功能? – Specimen

+0

你能帮我吗? @甲虫汁 – Specimen

如果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; 
}); 

Fiddle

如果你想要一个简单的JavaScript解决方案:

var items = json.items; 
for(var i = 0; i < items.length; i++){ 
    var item = items[i]; 
    alert(`ID: ${item.id} | Name: ${item.name}`); 
} 

Fiddle

假设呼叫到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"}] 
+0

谢谢..我看到这个作品,但你知道角度做同样的方式?我变得疯狂。事实上,我正在开发IONIC – Specimen

+0

当你在Angular中尝试这种方式时,你遇到了什么问题,@Specimen? –

+0

我需要将该功能转换为角度,我不知道我可以如何做到这一点。我试图在不同的地方声明变量,但我没有找到解决方案 – Specimen