2016-08-17 22 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" 
     } 
    } 
}, 

imはほとんど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を含んでいないことに注意してください。 – nnnnnn

+0

[アクセス/プロセス(入れ子にされた)オブジェクト、配列または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(',','')); 
関連する問題