2011-08-30 85 views
0

數據我有以下格式檢索參考從JSON

{"updates": 
    {"message" :"[[student:123]] is present."}, 
    "references":[{"type":"student","full_name":"XYZ","id":123}] 
} 

我該如何映射學生姓名使用目前在消息ID的消息中的JSON數據? 我相對較新的JSON解析。我目前使用EJS模板來將JSON操縱爲HTML。

在剛剛使用

<%alert(updates.message.student)%> 

返回 「不確定」。請幫忙。

+0

請看看我的答案。我更新了它以更全面地回答你的問題。 – jergason

回答

2

updates.message是一個字符串,而不是JavaScript對象。你可以通過引用整個屬性來判斷。 JavaScript字符串沒有student屬性,所以您得到undefined。您可以使用正則表達式從字符串中解析出JSON部分,然後使用JSON.parse()獲取JSON對象。但是,您的示例中的學號也位於updates.references[0].id

要獲得學生證,做到這一點:

<% alert(updates.references[0].id) %> 

編輯:如果你真的想要得到的ID從消息中,你需要以某種方式解析出來。如果消息格式始終相同,則可以嘗試正則表達式或字符串拆分來獲取包含該ID的部分。

var id_part = json.updates.message.split(" ")[0]; 
//parse out just the ID number in a group 
var re = /\[\[[^:]+:(\d+)\]\]/; 
var matches = re.exec(id_part); 
var id = matches[1]; 

然後,爲了獲得相應的數據從references部分,你需要遍歷,直到找到一個與id從消息。這會工作。

//Ghetto old for loop for browser compatibility 
for (var i = 0; i < updates.references.length; i++) { 
    if (updates.references[i].id == id) { 
     //We have found the reference we want. 
     //Do stuff with that reference. 
     break; 
    } 
} 
+0

非常感謝。這非常有幫助。 – RKV

0

嘗試

var json = { 
    "updates": { 
     "message": "[[student:123]] is present." 
    }, 
    "references": [ 
     { 
      "type": "student", 
      "full_name": "XYZ", 
      "id": 123 
     } 
    ] 
}; 

alert(json.references[0].full_name);