2017-09-23 76 views
0

只學習如何構建和讀取寵物採用網站的json對象我正在開發一個愛好項目。一個朋友建議我建一個這樣的:從用點表示法構建的JSON對象訪問文本

var userData = {}; 
userData['dogs'] = {}; 
userData.dogs['Spot'] = {}; 
userData.dogs.Spot['color'] = 'black'; 
userData.dogs.Spot['weight'] = '24lbs'; 
userData.dogs.Spot['location'] = 'Washington'; 
userData.dogs.Spot['comments'] = 'this is a long string of text'; 

我已想出如何此字符串化,存儲,檢索和分析,但我無法弄清楚如何訪問信息的各個部分(重例如)。從userData到userData.dogs到userData.dogs.spot的點是否是這樣構建對象的標準?我如何訪問每個屬性?

+1

朋友給你是一個糟糕的初學者g點。強烈建議通過:[access-process-nested-objects-arrays-or-json](https://stackoverflow.com/questions/11922383/access-process-nested-objects-arys-or-json) – charlietfl

回答

1
  1. 不,它不是標準打造的對象一樣,因爲這是使用迭代步驟(即程序),而JSON是一個聲明文字(記住:Ĵ AVA 小號 cript O bject N)。你可以表達像這樣同一個最終目標:

    userData = { 
        "dogs": { 
         "Spot": { 
          "color": "black", 
          "weight": "241lbs", 
          "location": "Washington", 
          "comments": "this is a big dog, 241lbs, wow" 
         } 
        } 
    }; 
    

    需要注意的是「純」 JSON需要雙引號分隔鍵。而腳本內對象文字可以使用不帶引號的標準標識符。

  2. 您可以使用虛線表示法訪問它們。如果您的對象具有不符合JavaScript標識符限制的鍵(例如,沒有空格,標點符號,必須以字母開頭等),則只需要使用字符串索引器屬性語法:

    console.log(userData。 dogs.Spot.color); console.log(userData.dogs.Spot.comments);

+1

[_this是一隻大狗,241lbs,(https://i.imgflip.com/mkk6r.jpg) –

+0

謝謝,這有助於理解它正在迭代構建它。 – HughP

-3

我做功能setDeephttps://jsbin.com/lagexubife/edit?js,console

如何使用

var obj = {} // object to mutate 
setDeep(obj, 'dogs.Spot.comments', 'this is a long string of text') 
console.log(obj.dogs.Spot.comments) 

代碼

var setDeep = function(data, keys, val, options){ 
    if(typeof keys === 'string' && !Array.isArray(keys)) 
     keys = String(keys); 
    if(typeof keys === 'string') 
     keys = keys.split('.'); 
    if(!Array.isArray(keys)) 
     return data; 
    options    = options || {}; 
    const strict  = !!options.strict; 
    const last_index = keys.length - 1; 
    var value   = data; 
    var l    = keys.length; 
    if(!strict && !value) 
     value = {}; 
    for(let i=0; i < l; i++){ 
     let key   = keys[i]; 
     if(i < last_index){ 
      if(typeof value[key] === "undefined" || value[key] === null){ 
       if(strict){ 
        // force throw error 
        value[key][keys[i+1]] = {}; 
       }else{ 
        value[key] = {}; 
       } 
      } 
     }else{ 
      if(i === last_index){ 
       value[key] = val; 
       break; 
      } 
     } 
     value = value[key]; 
    } 
    return data; 
} 
+0

我真的不認爲這個函數的怪物是初始化一個對象所必需的。這比標準的JSON方法有什麼優勢? –

+0

你怎麼能深深地改變現有的對象?手動檢查每個屬性級別的「未定義」? – Firanolfind

+1

這就像建立定製激光,以幫助解決需要簡單家用手電的問題 – charlietfl