2016-08-17 98 views
0

所以,我有这个json文件,其中我必须取出fileName标签,并使用它。如何使用javascript访问json中的嵌套密钥

{ 
"dataset": { 
    "private": false, 
    "stdyDscr": { 
     "citation": { 
      "titlStmt": { 
       "titl": "Smoke test", 
       "IDNo": { 
        "text": "10.5072/FK2/WNCZ16", 
        ".attrs": { 
         "agency": "doi" 
        } 
       } 
      }, 
      "rspStmt": { 
       "AuthEnty": "Dataverse, Admin" 
      }, 
      "biblCit": "Dataverse, Admin, 2015, \"Smoke test\", http://dx.doi.org/10.5072/FK2/WNCZ16, Root Dataverse, V1 [UNF:6:iuFERYJSwTaovVDvwBwsxQ==]" 
     } 
    }, 
    "fileDscr": { 
     "fileTxt": { 
      "fileName": "fearonLaitinData.tab", 
      "dimensns": { 
       "caseQnty": "6610", 
       "varQnty": "69" 
      }, 
      "fileType": "text/tab-separated-values" 
     }, 
     "notes": { 
      "text": "UNF:6:K5wLrMhjKoNX7znhVpU8lg==", 
      ".attrs": { 
       "level": "file", 
       "type": "VDC:UNF", 
       "subject": "Universal Numeric Fingerprint" 
      } 
     }, 
     ".attrs": { 
      "ID": "f6" 
     } 
    } 
}, 

即时使用d3.js主要是,但一些部分的jQuery和JavaScript与它。现在我在做:

d3.json(url,function(json){ 

       var jsondata=json; 

        var temp = jsondata.dataset.fileDscr.fileTxt.fileName; 
} 

有没有办法直接访问fileName?我问,因为,我必须使这个通用适合其他json文件,其中嵌套可能会不同。

+0

你所说的“直接”的意思是一个逗号分隔字符串指定键? –

+0

你的意思是你想要一种搜索​​未知对象结构的方法来获取与“'fileName”''等已知密钥名称相关联的值吗?如果密钥在对象中出现多次(如在你的例子中的“.attrs”')? (请注意,回调中的'json'参数和jsondata'变量实际上都不包含JSON,它们都是通过解析JSON而创建的对象的引用。) – nnnnnn

+0

[Access/process(nested)objects,数组或JSON](http://stackoverflow.com/questions/11922383/access-process-nested-objects-arrays-or-json) – Naga2Raja

回答

1

这将返回JSON数据中某个键的实例的值(如果存在)。

var data = {...}; 
function findValue(json, key) { 
    if (key in json) return json[key]; 
    else { 
    var otherValue; 
    for (var otherKey in json) { 
     if (json[otherKey] && json[otherKey].constructor === Object) { 
     otherValue = findValue(json[otherKey], key); 
     if (otherValue !== undefined) return otherValue; 
     } 
    } 
    } 
} 
console.log(findValue(data, 'fileName')); 
+0

谢谢!这工作完美! :) –

0

它将返回的所有值的

function walk(obj,keyname) {  
    var propertyVal="";                     
     for (var key in obj) { 
      if (obj.hasOwnProperty(key)) { 
       var val = obj[key];                      
       if(typeof(val) == 'object') { 
        console.log(val);                        
        propertyVal+= walk(val,keyname);             
       }else { 
        if(key == keyname){              
         propertyVal = propertyVal+","+obj[key];                  
        } 
       } 
      } 
     } 
     return propertyVal;       
} 
alert(walk(data,'filename').replace(',','')); 
相关问题