2014-03-28 50 views
1

我有一個這樣的對象:如何將JSON轉換爲使用現有方法的JavaScript對象?

function Point(x,y) 
{ 
    this.coorX = x; 
    this.coorY = y; 
} 

function Node(id,x,y) 
{ 
    this.id = id; 
    this.point = new Point(x,y); 

    this.getDescription = function(){ 
     return this.id + ': (' + this.punto.coorX + ', ' + this.punto.coorY + ')'; 
    } 

} 

我JSON格式導出節點的列表,:

JSON.stringify(NodeList); 

JSON:

{"NodeList":[{"id":0,"point":{"coorX":15,"coorY":15},"$$hashKey":"004"},{"id":1,"point":{"coorX":15,"coorY":151},"$$hashKey":"009"},{"id":2,"point":{"coorX":25,"coorY":15},"$$hashKey":"00E"}]} 

如果我輸入相同的JSON之後附:

NodeList = JSON.parse(text); 

導入後如何使用Node函數getDescription()

回答

1

你可以重新創建的節點,就像這樣:

var items = NodeList.NodeList, 
    nodes = []; 

for(var i = 0; i < items.lenght; i++) { 
    var item = items[i], 
     point = item.point, 
     node = new Node(item.id, point.coorX, point.coorY); 

    nodes.push(node); 
} 

// call getDescription of first node 
nodes[0].getDescription(); 
0

JSON不是一種編程語言。它支持數據而不是方法

+0

[JSON(JavaScript的對象符號)是一種輕量級的數據交換格式。](http://www.json.org/) –

0

我已經創建了一個GitHub的-要旨正是這樣做的: https://gist.github.com/Hoff97/7518680

使用jsonWF,objWF對德和編碼。

我有另一要點是更有效地做同樣的事情,也是能夠轉換循環對象:https://gist.github.com/Hoff97/9842228

+0

僅限於鏈接的答案是不鼓勵的。請解釋你的方法。這似乎很有趣。 –

+0

好的,所以jsonWF函數實際上用包含實際方法代碼的屬性替換所有方法。將JSON字符串轉換回對象時,所有包含方法代碼的屬性都會轉換回方法。 – Hoff

+0

恩,似乎有遞歸和元編程(我不是任何粉絲)。如果你花時間解釋使用assignFuncFromStr來擴充方法/函數的遞歸過程,我相信你會得到相當多的代表點。如果你解釋了這種方法的一些缺點,並給出一些這樣的解決方案合理使用的例子,我很樂意爲你的答案投票。 –

相關問題