2012-12-01 127 views
0

嗨我對JavaScript很新,我對如何處理下面的對象有點困惑。我如何將它轉換爲數組pt,其中每個條目都具有屬性selid x,y,z?JavaScript解析:JSON到Javascript對象

這是我在Chrome控制檯中看到: Object {pt[2][y]: "1.3571934700012207", pt[0][selid]: "2", pt[0][z]: "0", pt[3][x]: "3.6684491634368896", pt[2][z]: "0"…}

如果我試圖訪問PT像下面的例子:

var X = pt[2].x; 

我得到的和錯誤「無法讀取的未定義的屬性」。我認爲這是因爲對象更像是一個字典,其中「pt [2] [y]」作爲關鍵字,「1.3571934700012207」作爲值。 但是我想像一個數組pt那樣使用具有屬性x,y,z,selid的對象來訪問它。 有沒有辦法將數據轉換/解析爲我想要的格式? 非常感謝。

+5

您已經標記了JSON的問題,但問題中沒有JSON。您引用的文字是否需要轉換爲文字? –

+2

您發佈的代碼是您擁有的或想要獲得的內容?數據來自哪裏?如果你對問題更具體,你會得到更多有用的答案。 –

+0

我猜PT是已經與屬性的對象數組seild,X,Y,Z –

回答

3

你有評論說,你做console.log(data)得到obj的內容。所以,可能是你應該做的

var X = data["pt[2][x]"]; 

如果你想將它轉換成數組PT你應該做的:

var data = { 
    "pt[0][x]" : 1, 
    "pt[1][x]" : 2, 
    "pt[2][y]" : 3, 
    "pt[2][z]" : 3 
}; 

var pattern = /^pt\[([^\]]+)\]\[([^\]]+)\]$/i ; 

var pt = []; 
for(var key in data){ 

    if (pattern.test(key)){ 
     var m = key.match(pattern); 
     if(!pt[m[1]]) pt[m[1]] = {}; 
     pt[m[1]][m[2]] = data[key]; 
    } 
} 

alert(pt[0].x) 
+0

是的 - 但我需要的數據結構像一個數組。在其他函數中,我必須這樣訪問:var X = pt [2] .x;我正在尋找一種簡單的方法來轉換數據... – timkado

+1

我將編寫代碼來轉換它。 (稍微等一下) –

+0

非常感謝 – timkado

1

這是可怕的不可讀的,所以我對此表示道歉。

不過你可以試試這個:

var v = {pt:new Array()}; 
for(var a in data) eval("if(!v." + /pt\[\d+\]/.exec(a) + ") v." + /pt\[\d+\]/.exec(a) + " = {}; v." + a.replace(/\]\[/,"][\"").replace(/\]$/,"\"]") + " = " + data[a]); 

則v應該有你想要的東西。

(它只是創建/執行下面的代碼行:

if(!v.pt[2]) v.pt[2] = {}; v.pt[2]["y"] = 1.3571934700012207 
if(!v.pt[0]) v.pt[0] = {}; v.pt[0]["selid"] = 2 
if(!v.pt[0]) v.pt[0] = {}; v.pt[0]["z"] = 0 
if(!v.pt[3]) v.pt[3] = {}; v.pt[3]["x"] = 3.6684491634368896 
if(!v.pt[2]) v.pt[2] = {}; v.pt[2]["z"] = 0 

0

答案已經被選中,但這裏是一個JSON對象爲原請求的格式

var pt=[ 
    {x:0,y:1,z:2,strid:"string"}, 
    {x:5,y:5,z:5,strid:"string2"} 
]; 

所以現在你可以做你喜歡的循環:

for(i=0;i<pt.length,i++){ 
    alert("x is:"+pt[i].x+" y is:"+pt[i].y+ 
     " z is:"+pt[i].z+" strid is:"+pt[i+].strid) 
}