2016-04-15 76 views
1

我需要能够解析这个json数组/对象的值,其中一个元素匹配一个值。 例如,我想获取$的值,其中@name = nameGreen。javascript或json表达式来解析json得到一定的值

{ 
     "startNode": { 
     "result": { 
      "node1": { 
      "$": "A_Value" 
      }, 
      "attribute-value": [ 
      { 
       "@name": "nameRed", 
       "$": "attribute1" 
      }, 
      { 
       "@name": "nameBlue", 
       "$": "attribute2" 
      }, 
      { 
       "@name": "nameGreen", 
       "$": "attribute3" 
      }, 
      { 
       "@name": "nameYellow", 
       "$": "attribute4" 
      } 
      ] 
     } 
     } 
    } 

获取节点1的值很容易console.log(['startNode'].result.node1['$']);会让我A_Value的价值。

我只是有问题编写逻辑, 1.当@name = nameGreen, 2.然后得到$

值注意:此JSON节点是动态的,所以@name和$价值观总会改变。

真的很感谢帮助。

回答

0

您需要遍历实际值来检查它们。例如,

var attrs = ['startNode'].result.['attribute-value'] 
for (var i = 0; i < attrs.length; i++) { 
    if (attrs[i]['@name'] == 'nameGreen') ... 
} 

(很明显,你可以写一些更好的代码来做到这一点。)

我建议你找一些库,帮助您以更好的方式提取这些数据,因为它看起来就像你在解析XML一样。

0

JSBin Example

继承人一个办法做到这一点,通过 “属性 - 值” 的数组循环:

var a = d.startNode.result["attribute-value"]; 

for (var i = 0; i < a.length; i++) { 
    if (a[i]['@name'] === 'nameRed') { 
    console.log(a[i].$); 
    } 
} 

注意事项:

  • 如果一个变量具有“ - '在其中,尝试使用括号符号而不是点符号。

  • 相同奇数字符像@

  • 然而,使用$时,你可以从代码见上文

0

一般功能按要求(ES6)

为不需要
const getThing = (arr, key, test, match) => (
    arr.filter(el => (el[key] === test))[0][match] 
); 

var arr = obj.startNode.result['attribute-value']; 
var out = getThing(arr, '@name', 'nameGreen', '$'); 

DEMO

或者是再详细ES5同样的事情:

function getThing(arr, key, test, match) { 
    return arr.filter(function (el) { 
    return el[key] === test; 
    })[0][match]; 
}; 

DEMO

0

在ES6你也可以使用数组对象的find方法或polyfill为它之前找到一个“属性 - 值”对象读取其属性$

var nodes = { ..... }; // the posted object. 

var findObj = (arrayOfObj, propName, propVal) => 
    arrayOfObj.find((obj) => obj[ propName] === propVal); 

var atr = findObj(nodes.startNode.result["attribute-value"], "@name", "nameGreen"); 

console.log(atr ? "$ for namegreen: " + atr.$ : "not found") 

其中findObj被搜索arrayOfObj为一个对象的函数与财产propName与值propVal和提供给find的箭头功能返回truefalse为比赛。