JSON响应错误地匹配颜色数据的部分键

时间:2016-08-07 16:44:01

标签: javascript json object

由于jsonData.search(key)!== -1,JavaScript代码与“COMPLETED”匹配,因为JSON响应不包含COMPLETED,所以它应该在输出中显示红色而不是绿色。

参考:

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 - red”。

我如何与NOT_COMPLETED匹配 - 读取颜色而不是COMPLETED - 绿色?

1 个答案:

答案 0 :(得分:1)

https://jsfiddle.net/xq7hLo6h/6/只需搜索"KEY"(带引号)而不是KEY的JSON字符串即可修复此问题:

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

这样可以避免在COMPLETED内找到"NOT_COMPLETED"的问题。

然而,更健壮的方法是实际解析JSON字符串以获取对象,然后检查实际属性。