0

我有以下格式的json数据

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

如何使用消息上出现的 id 将学生姓名映射到消息?我对 JSON 解析比较陌生。我目前正在使用 EJS 模板将 JSON 操作为 HTML。

在那只是使用

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

返回“未定义”。请帮忙。

4

2 回答 2

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;
    }
}
于 2011-08-30T05:34:47.000 回答
0

尝试

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

alert(json.references[0].full_name);
于 2011-08-30T05:51:44.423 回答