2016-08-07 9 views
0

jsonData.search(key)!== -1のためにJavaスクリプトコードが "COMPLETED"と一致すると、jsonレスポンスにCOMPLETEDが含まれていないため、出力の緑の代わりにカラーを使用します。JSONレスポンスがカラーデータの部分キーと正しく一致していません

参考:

Getting specific color for specific value using JSON data

出力:[ "グリーン"、 "赤"]期待


:[ "赤"]

jsonData:

{"cols":[{"label":"sprint_status","type":"string"},{"label":"count","type":"string"}],"rows":[{"c":[{"v":"NOT_COMPLETED"},{"v":4}]}]} 

はJavaScript:

const colorMap = { 
    COMPLETED: 'green', 
    NOT_COMPLETED: 'red' 
}; 

Object.keys(colorMap).forEach((key, index) => { 
    if (jsonData.search(key) !== -1) { 
     customColors.push(colorMap[key]); 
    } 
}); 

実際の出力: "COMPLETED - 緑" に

カラーキーが一致した最初の原因検索に(キー)。 - 最初

カラーキーは "赤NOT_COMPLETED" に一致する必要があります

:出力期待

誰かがNOT_COMPLETEDに合わせて私を助けてください - 代わりにCOMPLETEDの色を読んで - 緑の色を?前もって感謝します!代わりにKEY

+0

なぜJSON文字列を解析して結果のオブジェクトを処理しないのですか? 'let data = JSON.parse(" jsonData string ");'と同様に 'data.rows.c.v ===" COMPLETED "'をチェックしますか?または、この質問は特に 'String.search()'についてですか?私はあなたの仕事を完了するためにいくつかの正規表現が必要になると思います。 –

+0

目的はJSON文字列を使用して色を一致させることです。この場合、JSON文字列にはCOMPLETEDは含まれておらず、NOT_COMPLETEDのみが含まれていますが、検索によって緑色になります。それはデータと正確に一致するはずです。 –

+1

しかし、チェックできるオブジェクトを受け取るためにJSON文字列を解析したいのですが?とにかくこの場合、if(jsonData.search( "\" + key + "\" ")!== -1)'をif条件として使うことはできますが、文字列の解析ははるかに頑強です –

答えて

1

このhttps://jsfiddle.net/xq7hLo6h/6/修正単に(引用符で)"KEY"のためのJSON文字列を検索することによって問題:

if (jsonData.search("\"" + key + "\"") >= 0) { /* ... */ } 

COMPLETEDに問題が回避される"NOT_COMPLETED"の中に発見されているこの方法です。

しかし、より堅牢な方法は、実際にJSON文字列を解析してオブジェクトを取得し、実際のプロパティを確認することです。

関連する問題