2017-08-13 69 views
2

我正在開發一個工具搜索,在輸入字段中找到與用戶輸入的關鍵字相匹配的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

回答

1

更改這條線在原始代碼:

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

要:

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

非常感謝..這實際上適用於我。我無法相信我花了4個小時試圖找到解決方案。嘆息 – Specimen

+0

Beetlejuice我有另一個提示..當我尋找一個省份時,我怎麼能知道與該省有關的身份證號碼?我正在做角/離子和我漂亮的小白菜。我需要找到一個解決方案來創建某種搜索欄來選擇該數組的省份,並保持ID相關..我需要另一個功能? – Specimen

+0

你能幫我嗎? @甲蟲汁 – Specimen

0

如果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

1

假設呼叫到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