2017-08-13 17 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"}]} 

これは2つのプロパティ(項目とステータス)を持つオブジェクトで、項目は2つのプロパティ(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私は別のcuestionを持っています..私は県を検索するときにどのように私はあまりにもその州に関連付けられているIDを知ることができますか?私は角度/イオンと私のかなりのnoobでこれをやっている。私はその配列の州を選択する検索バーのいくつかの種類を作成するためのソリューションを見つける必要がありますidに関連付けられて..私は別の関数が必要ですか? – Specimen

+0

あなたはそれを手伝ってもらえますか? @ビートルジュース – Specimen

0

のようなものを試してみましたjQueryのオプションである場合は、ここであなたが行きます。その呼び出しを想定し

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

:あなたはプレーンなJavaScriptのソリューションをしたい場合は

// 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

:あなたがしなければならないのは、$.eachitems配列を反復処理であります〜json()はあなたの答えが記述するJSONを返します。followiあなたのために働くでしょう。

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でこのような方法で試してみると、何が問題になっていますか? –

+0

私はその機能を角度に変換する必要があり、私はこれをどうやってできるのか分かりません。私はさまざまな場所で変数を宣言しようとしていますが、解決策が見つかりませんでした。 – Specimen

関連する問題