使用JSON

时间:2015-08-11 04:42:13

标签: javascript jquery json

我需要以下物品:

var myObj={
    "rules": {
        "email": {
            "required": true,
            "email": true,
            "remote": {
                "url": "check-email.php",
                "type": "post",
                "data": {
                    "someName1": function() {
                        return $( '#someID1' ).val();
                    },             
                    "someName2": function() {
                        return $( '#someID2' ).val();
                    },             
                    "someName3": "bla"
                }
            }
        }
    }
};

要创建它,我只有一些JSON,如下所示:

{
    "rules": {
        "email": {
            "required": true,
            "email": true,
            "remote": {
                "url": "check-email.php",
                "type": "post",
                "data": {
                    "someName1": {"id":"someID1"},             
                    "someName2": {"id":"someID2"},             
                    "someName3": "bla"
                }
            }
        }
    }
}

{
    "rules": {
        "email": {
            "required": true,
            "email": true,
            "remote": {
                "url": "check-email.php",
                "type": "post",
                "data": {
                    "someName1": {"function":"return $( '#someID1' ).val()"},             
                    "someName2": {"function":"return $( '#someID2' ).val()"},             
                    "someName3": "bla"
                }
            }
        }
    }
}

或类似的东西。

如何实现这一目标?

2 个答案:

答案 0 :(得分:3)

您可以使用Function即时创建功能。假设你有第二个JSON结构:

d = obj.rules.email.remote.data;
Object.keys(d).forEach(function(key) {
    d[key] = new Function(d[key].function); 
    //Note: You might want to check if d[key].function exists before using it.
});

答案 1 :(得分:2)

对于这种模式:

{
    "rules": {
        "email": {
            "required": true,
            "email": true,
            "remote": {
                "url": "check-email.php",
                "type": "post",
                "data": {
                    "someName1": {"id":"someID1"},             
                    "someName2": {"id":"someID2"},             
                    "someName3": "bla"
                }
            }
        }
    }
}

可以完成:

for(var key in myObj.rules.email.remote.data){
    if(myObj.rules.email.remote.data[key].id){
    myObj.rules.email.remote.data[key] = function(){
          return $('#'+myObj.rules.email.remote.data[key].id).val();
        }
    }
}

如果电子邮件没有硬编码,则可以按以下方式完成:

for(var key1 in myObj.rules){
 for(var key in myObj.rules[key1].remote.data){
        if(myObj.rules[key1].remote.data[key].id){
        myObj.rules[key1].remote.data[key] = function(){
              return $('#'+myObj.rules[key1].remote.data[key].id).val();
            }
        }
    }
}