2015-08-16 51 views
0

所以,我有這個函數可以獲取JSON對象,但我想使它更簡單,所以我創建了一個函數來獲取JSON對象的值。爲什麼它不起作用?JavaScript將字符串轉換爲json對象

var itemData = { 
 
    weapon: function() { 
 
     return { 
 
      1: { 
 
       'name': 'Dagger', 
 
        'extra_skill': 'none', 
 
        'cost': 500, 
 
        'attack': 5 
 
      }, 
 
      2: { 
 
       'name': 'Pickaxe', 
 
        'extra_skill': 'mining', 
 
        'cost': 25, 
 
        'attack': 5 
 
      } 
 
     } 
 
    }, 
 
    getWeapon: function (value, x) { 
 
     var obj = JSON.parse(value); 
 
     return itemData.weapon()[x].obj 
 
    } 
 
} 
 

 
// outputs: Dagger 
 
console.log(itemData.weapon()[1].name) 
 

 
// Get the name of weapon 1 
 
// however, it outputs: Uncaught SyntaxError: Unexpected token a 
 
console.log('Getting weapon... ' + itemData.getWeapon('name', 1))

我在做什麼錯?

+5

JSON是一個**文本註釋**。如果您正在編寫JavaScript代碼,那麼除非您要處理字符串,否則不會處理JSON。在你的問題中根本沒有JSON;因此,不需要'JSON.parse'(事實上,這是問題的一部分)。 –

回答

5

實際上,您根本不需要JSON解析就可以正常工作,因爲沒有任何地方需要解析JSON字符串。

這裏是一個工作示例:

var itemData = { 
 
    weapon: function() { 
 
     return [ 
 
      { 
 
       'name': 'Dagger', 
 
        'extra_skill': 'none', 
 
        'cost': 500, 
 
        'attack': 5 
 
      }, 
 
      { 
 
       'name': 'Pickaxe', 
 
        'extra_skill': 'mining', 
 
        'cost': 25, 
 
        'attack': 5 
 
      } 
 
     ]; 
 
    }, 
 
    getWeapon: function (value, x) { 
 
     return itemData.weapon()[x][value]; 
 
    } 
 
} 
 

 
// outputs: Dagger 
 
console.log(itemData.weapon()[0].name) 
 

 
// outputs: Getting weapon... Pickaxe 
 
console.log('Getting weapon... ' + itemData.getWeapon('name', 1))

+0

我喜歡這個答案在getWeapon中使用'value'的方式,因爲'getWeapon'的意圖似乎總是返回'name'。 –

+1

我明白我現在做錯了什麼。謝謝。 –

+0

對於每個類都有一個責任的類/函數是很好的,所以我建議O.P.澄清'getWeapon'應該返回的具體內容。如果計劃總是返回'name',那麼'name'應該在'getWeapon'中進行硬編碼。這可以避免在傳入'value'時無意中造成拼寫錯誤。 –

相關問題