2016-11-13 42 views
1

我尝试从json获取值时遇到了一些麻烦。首先,我有一个json数组,每个数组都有一个名称(atributo),一个相似性(忘记这个),最后是一个名为valores的数组(key和value)(chave = key/valor = value)。更好的方法来获得正确的值

所以我有很多案例,每个案例都有一个像这样的例子下面的例子的数组值。我想要的是使用我案例中的钥匙从Valores中获取价值。

我知道我正在使用两个,一个找到正确的atributo,另一个找到正确的钥匙。有没有办法更容易做到这一点?如果需要,我可以改造这个json模式。

我的数组:

[ 
    { 
    "atributo": "date", 
    "similaridade": "Sim", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Abril", "valor": "0"}, 
     {"chave": "Maio", "valor": "1"}, 
     {"chave": "Junho", "valor": "2"}, 
     {"chave": "Julho", "valor": "3"}, 
     {"chave": "Agosto", "valor": "4"}, 
     {"chave": "Setembro", "valor": "5"}, 
     {"chave": "Outubro", "valor": "6"} 
    ] 
    }, 
    { 
    "atributo": "plantStand", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Normal", "valor": "0"}, 
     {"chave": "lt-normal", "valor": "1"} 
    ] 
    }, 
    { 
    "atributo": "precip", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "lt-normal", "valor": "0"}, 
     {"chave": "Normal", "valor": "1"}, 
     {"chave": "gt-normal", "valor": "2"} 
    ] 
    }, 
    { 
    "atributo": "temp", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "lt-norm", "valor": "0"}, 
     {"chave": "norm", "valor": "1"}, 
     {"chave": "gt-norm", "valor": "2"} 
    ] 
    }, 
    { 
    "atributo": "hail", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Yes", "valor": "0"}, 
     {"chave": "No", "valor": "1"} 
    ] 
    }, 
    { 
    "atributo": "cropHist", 
    "similaridade": "Sim", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "diff-1st-yr", "valor": "0"}, 
     {"chave": "same-1st-yr", "valor": "1"}, 
     {"chave": "same-lst-two-yrs", "valor": "2"}, 
     {"chave": "same-lst-sev-yrs", "valor": "3"} 
    ] 
    }, 
    { 
    "atributo": "areaDamaged", 
    "similaridade": "Sim", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "scattered", "valor": "0"}, 
     {"chave": "low-areas", "valor": "1"}, 
     {"chave": "upper-areas", "valor": "2"}, 
     {"chave": "whole-field", "valor": "3"} 
    ] 
    }, 
    { 
    "atributo": "severity", 
    "similaridade": "Sim", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Minor", "valor": "0"}, 
     {"chave": "pot-severe", "valor": "1"}, 
     {"chave": "severe", "valor": "2"} 
    ] 
    }, 
    { 
    "atributo": "seedTmt", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "none", "valor": "0"}, 
     {"chave": "fungicida", "valor": "1"}, 
     {"chave": "Outros", "valor": "2"} 
    ] 
    }, 
    { 
    "atributo": "germination", 
    "similaridade": "Sim", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "90-100%", "valor": "0"}, 
     {"chave": "80-89%", "valor": "1"}, 
     {"chave": "lt-80%", "valor": "2"} 
    ] 
    }, 
    { 
    "atributo": "plantGrowth", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Norm", "valor": "0"}, 
     {"chave": "Abnorm", "valor": "1"} 
    ] 
    }, 
    { 
    "atributo": "leaves", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Norm", "valor": "0"}, 
     {"chave": "Abnorm", "valor": "1"} 
    ] 
    }, 
    { 
    "atributo": "leafspotsHalo", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "absent", "valor": "0"}, 
     {"chave": "yellow-halos", "valor": "1"}, 
     {"chave": "no-yellow-halos", "valor": "2"} 
    ] 
    }, 
    { 
    "atributo": "leafspotsMarg", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "w-s-marg", "valor": "0"}, 
     {"chave": "no-w-s-marg", "valor": "1"}, 
     {"chave": "dna", "valor": "2"} 
    ] 
    }, 
    { 
    "atributo": "leafspotSize", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "lt-1/8", "valor": "0"}, 
     {"chave": "gt-1/8", "valor": "1"}, 
     {"chave": "dna", "valor": "2"} 
    ] 
    }, 
    { 
    "atributo": "leafShread", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "absent", "valor": "0"}, 
     {"chave": "Present", "valor": "1"} 
    ] 
    }, 
    { 
    "atributo": "leafMalf", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Absent", "valor": "0"}, 
     {"chave": "Present", "valor": "1"} 
    ] 
    }, 
    { 
    "atributo": "leafMild", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Absent", "valor": "0"}, 
     {"chave": "Upper-surf", "valor": "1"}, 
     {"chave": "Lower-surf", "valor": "2"} 
    ] 
    }, 
    { 
    "atributo": "stem", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Norm", "valor": "0"}, 
     {"chave": "Abnorm", "valor": "1"} 
    ] 
    }, 
    { 
    "atributo": "lodging", 
    "similaridade": "Sim", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Yes", "valor": "0"}, 
     {"chave": "No", "valor": "1"} 
    ] 
    }, 
    { 
    "atributo": "stemCankers", 
    "similaridade": "Sim", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Absent", "valor": "0"}, 
     {"chave": "below-soil", "valor": "1"}, 
     {"chave": "Above-soil", "valor": "2"}, 
     {"chave": "Above-sec-nde", "valor": "3"} 
    ] 
    }, 
    { 
    "atributo": "cankerLesion", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "dna", "valor": "0"}, 
     {"chave": "Brown", "valor": "1"}, 
     {"chave": "dk-brown-blk", "valor": "2"}, 
     {"chave": "tan", "valor": "3"} 
    ] 
    }, 
    { 
    "atributo": "fruitingBodies", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Absent", "valor": "0"}, 
     {"chave": "Present", "valor": "1"} 
    ] 
    }, 
    { 
    "atributo": "externalDecay", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Absent", "valor": "0"}, 
     {"chave": "firm-and-dry", "valor": "1"}, 
     {"chave": "watery", "valor": "2"} 
    ] 
    }, 
    { 
    "atributo": "mycelium", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Absent", "valor": "0"}, 
     {"chave": "Present", "valor": "1"} 
    ] 
    }, 
    { 
    "atributo": "intDiscolor", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "None", "valor": "0"}, 
     {"chave": "Brown", "valor": "1"}, 
     {"chave": "Black", "valor": "2"} 
    ] 
    }, 
    { 
    "atributo": "sclerotia", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Absent", "valor": "0"}, 
     {"chave": "Present", "valor": "1"} 
    ] 
    }, 
    { 
    "atributo": "fruitPods", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Norm", "valor": "0"}, 
     {"chave": "Diseased", "valor": "1"}, 
     {"chave": "few-present", "valor": "2"}, 
     {"chave": "dna", "valor": "3"} 
    ] 
    }, 
    { 
    "atributo": "fruitSpots", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Absent", "valor": "0"}, 
     {"chave": "Colored", "valor": "1"}, 
     {"chave": "Brown-w/blk-specks", "valor": "2"}, 
     {"chave": "Distort", "valor": "3"}, 
     {"chave": "dna", "valor": "4"} 
    ] 
    }, 
    { 
    "atributo": "seed", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Norm", "valor": "0"}, 
     {"chave": "Abnorm", "valor": "1"} 
    ] 
    }, 
    { 
    "atributo": "moldGrowth", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Absent", "valor": "0"}, 
     {"chave": "Present", "valor": "1"} 
    ] 
    }, 
    { 
    "atributo": "seedDiscolor", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Absent", "valor": "0"}, 
     {"chave": "Present", "valor": "1"} 
    ] 
    }, 
    { 
    "atributo": "seedSize", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Norm", "valor": "0"}, 
     {"chave": "lt-norm", "valor": "1"} 
    ] 
    }, 
    { 
    "atributo": "shriveling", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Absent", "valor": "0"}, 
     {"chave": "Present", "valor": "1"} 
    ] 
    }, 
    { 
    "atributo": "roots", 
    "similaridade": "Não", 
    "valores": [ 
     {"chave": "Desconhecido", "valor": "?"}, 
     {"chave": "Norm", "valor": "0"}, 
     {"chave": "Rotted", "valor": "1"}, 
     {"chave": "galls-cysts", "valor": "2"} 
    ] 
    } 
] 

样本情况:

{ 
    "caso": 1, 
    "doenca": "diaporthe-stem-canker", 
    "areaDamaged": "low-areas", 
    "cankerLesion": "Brown", 
    "cropHist": "same-1st-yr", 
    "date": "Outubro", 
    "externalDecay": "firm-and-dry", 
    "fruitSpots": "dna", 
    "fruitingBodies": "Present", 
    "fruitPods": "Norm", 
    "germination": "90-100%", 
    "hail": "Yes", 
    "intDiscolor": "None", 
    "leafMalf": "Absent", 
    "leafMild": "Absent", 
    "leafShread": "absent", 
    "leafspotsHalo": "absent", 
    "leafspotSize": "dna", 
    "leafspotsMarg": "dna", 
    "leaves": "Abnorm", 
    "lodging": "No", 
    "moldGrowth": "Absent", 
    "mycelium": "Absent", 
    "plantGrowth": "Abnorm", 
    "plantStand": "Normal", 
    "precip": "gt-normal", 
    "roots": "Norm", 
    "sclerotia": "Absent", 
    "seed": "Norm", 
    "seedDiscolor": "Absent", 
    "seedSize": "Norm", 
    "seedTmt": "none", 
    "severity": "pot-severe", 
    "shriveling": "Absent", 
    "stem": "Abnorm", 
    "stemCankers": "Above-sec-nde", 
    "temp": "norm" 
    } 

所以我在那里areaDamaged:低的地区,我想从areaDamaged采取的低区域的价值。任何人都知道更好的方式?

回答

2

我假设的 “更好” 你的意思是 “更有效”。

如果是这样,那么只要你有数组到处,就没有“更好”的方法。

但是,它看起来像你的数组持有一些参考数据,你会一遍又一遍访问。我有时候会在这种情况下是数组转换为地图和他们工作得更快,这样的事情:

var refDataMap = {}; 

var refDataItem, refDataValue; 

for (var i = 0; i < refData.length; i++) { 
    refDataItem = refData[i]; 
    refDataMap[refDataItem.atributo] = refDataItem; 
    refDataItem.valoresMap = {}; 
    for (var j = 0; j < refDataItem.valores.length; j++) { 
     refDataValue = refDataItem.valores[j]; 
     refDataItem.valoresMap[refDataValue.chave] = refDataValue.valor; 
    } 
} 

var result = refDataMap["seed"].valoresMap["Abnorm"]; // Gives value 1 

我已经创造了一些性能测试,可以看到,访问地图像这样的〜25%的速度比遍历这些数组(http://jsben.ch/#/ADhFC)。但是,如果将映射初始化序列包含在测试中,则如果测量单个访问(http://jsben.ch/#/GQBC0),则阵列速度会快两倍。

我发现你需要访问这个〜50次的地​​图初始化开销开始付清(http://jsben.ch/#/b6vbs)。

+0

哇,谢谢!说实话,我一直在寻找一种更简单的方式来实现,但你的答案对于实现和效率来说简直太棒了。非常感谢!是的,我会访问超过300次,所以它会更好我 –

+0

很高兴成为帮助:]祝你好运! – Avius

1

除了在json中使用属性“valor”和“chave”,您可以在json结构中使用key/value直接。

像这样:

var propriedades = {  
    "areaDamaged" : { 
     "similaridade": "Sim", 
     "valores": { 
      "Desconhecido" : "?", 
      "scattered" : "0", 
      "low-areas" : "1", 
      "upper-areas" : "2", 
      "whole-field" : "3" 
     } 
    }, 
... 

然后你就可以得到价值更容易:

var valor = propriedades["areaDamaged"].valores["low-areas"]; 
+0

谢谢!这正是我需要的 –

相关问题