2016-11-27 83 views
-2

我正在開發一個項目,我必須使用動態JSON文件中的數據。這是JSON文件的外觀示例。從半動態JSON文件獲取值

{ 
    "selectors": { 
     "title": { 
      "css": ".title" 
     }, 
     "url": { 
      "css": ".url" 
     } 
    } 
} 

由於JSON文件的內容是動態的,我不能像例如訪問對象:

var data = '{"selectors":{"title":{"css":".title"},"url":{"css":".url"}}}'; 
var json = JSON.parse(data); 
var element = json.selectors.title.css; 

然而,有兩個對象,將始終具有相同的名稱,而那些是選擇器css

現在,我怎麼訪問的對象冠軍網址時間,如果他們是動態的?然後訪問css對象槽?

我需要vanila JavaScript,而不是jQuery。

+0

這是最好的,如果你做自己的工作,然後問我們什麼時候卡住了。我們不是真的在這裏爲你做編程任務。請閱讀[問]。 –

+0

你可以使用[Object.keys()](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/keys)來獲取選擇器和css中的動態鍵「子對象「。然後,結合[Array.includes()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes),您可以確定是否存在指定的密鑰'title'或'url'等,最後得到這些對象。 – pazitos10

回答

1

因爲你不知道,如果一個特定的屬性存在,你需要遍歷所有的人:

var json = JSON.parse(data); 
for (key in json) { 

} 

但要確保你只有通過有效的對象循環(而不是什麼其他人可能有篡改),你應該檢查hasOwnProperty:

var json = JSON.parse(data); 
for (key in json) { 
    if (json.hasOwnProperty(key) { 

    } 
} 

現在你一定要遍歷屬性的第一級,這在你的例子僅僅是屬性selectors。現在,您可以添加一個循環來檢查屬性的第二級:

var json = JSON.parse(data); 
for (key in json) { 
    if (json.hasOwnProperty(key) { 
    for (second_level in key) { 
     if (key.hasOwnProperty(second_level) { 
     if (second_level == 'title') { /* do something with title */ } 
     if (second_level == 'url') { /* do something with url */ } 
     } 
    } 
    } 
} 

這可以變得有些混亂,而是因爲你希望一個特定的結構,你可以檢查這些屬性:

if (json.hasOwnProperty('selectors') { 
    if (json.selectors.hasOwnProperty('title') { /* do something with title*/ } 
    if (json.selectors.hasOwnProperty('url') { /* do something with url */ } 
} 

我們可以直接訪問屬性標題和url,因爲在你的json中,這些屬性是對象({})而不是數組([]),如果它們是數組,則需要循環訪問它們。

希望它有幫助