从JSON检索引用数据

时间:2011-08-30 05:23:08

标签: json ejs

我有以下格式的json数据

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

如何使用邮件中显示的ID将学生姓名映射到邮件? 我对JSON解析比较陌生。我目前正在使用EJS模板将JSON操作为HTML。

只需使用

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

返回“undefined”。请帮忙。

2 个答案:

答案 0 :(得分:2)

updates.message是一个字符串,而不是JavaScript对象。您可以通过整个属性的引号来判断。 JavaScript字符串没有student属性,因此您获得undefined。您可以使用正则表达式从字符串中解析出JSON部分,然后使用JSON.parse()来获取JSON对象。但是,您的示例中的学生ID也在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;
    }
}

答案 1 :(得分:0)

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

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