2014-02-26 20 views
2

我有一個JSON字符串是這樣的:使用JsonPath不知道提取價值的關鍵

"files": { 
    "fileA.c": { 
     "size": 100 
    }, 
    "fileB.txt": { 
     "size": 200 
    } 
    } 

我要提取的文件名,{「fileA.c」,「fileB.txt」},使用JsonPath 。請注意,文件數量未知。

的問題是,我不知道文件名是否是一個鍵或值:

  • 如果這是一個關鍵的......好,我當然不知道密鑰的名字,因爲這是我想要提取的信息。
  • 如果它是一個值,那麼它的關鍵是什麼?
  • 我可以使用JsonPath來提取文件名嗎?如果是這樣,怎麼樣?
  • 如果JsonPath無法做到這一點,是否有任何Json的Java庫可以實現這一目標?

回答

0

在你的榜樣,fileA.c和fileB.txt是關鍵,你可以通過迭代在封閉的對象的密鑰(由密鑰「文件」中所引用)得到它們。

我不認爲JSONPath在這種情況下真的是合適的(或者甚至是適用的),它被設計用於在知道文檔結構時訪問元素,這意味着基本上你知道密鑰。簡單地使用JSON解析器會容易得多。

0

我建議你修改你的數據結構,就像這樣;

var data = { 
    "files": [ 
     { 
     "name": "fileA.c", 
     "size": 100 
     }, 
     { 
     "name": "fileB.txt", 
     "size": 200 
     }, 
     { 
     "name": "fileC.txt", 
     "size": 50 
     } 
    ] 
}; 

當結構這樣,你可以使用DefiantJS(http://defiantjs.com)來查詢其文件尺寸大於100 ......是這樣的:

JSON.search(data, '//*[size >= 100]/name') 

DefiantJS擴展全局對象JSON與方法「搜索」,您可以使用它查詢帶有XPath表達式的JSON結構。

要查看與您的數據工作的例子,看看這個小提琴: http://jsfiddle.net/jRN22/