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.messageJavaScript オブジェクトではなく文字列です。属性全体を引用符で囲むことでわかります。JavaScript 文字列にはstudentプロパティがないため、undefined. 正規表現を使用して文字列から JSON 部分を解析し、それを使用JSON.parse()して JSON オブジェクトを取得できます。ただし、学生IDもupdates.references[0].idあなたの例に含まれています。

学生 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 に答える