Javascript 使用JSON中的方法创建JS对象
我需要以下对象:Javascript 使用JSON中的方法创建JS对象,javascript,jquery,json,Javascript,Jquery,Json,我需要以下对象: var myObj={ "rules": { "email": { "required": true, "email": true, "remote": { "url": "check-email.php", "type": "post", "data": {
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": {"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();
}
}
}
}
如果电子邮件未硬编码,则可以按以下方式进行:
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();
}
}
}
}
您可以使用
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.
});
我的缺点是没有更具体。如果
电子邮件
不能硬编码,并且任何具有类似模式的邮件都会发生这种情况,该怎么办?模式是*.rules.*.remote.data
。谢谢Gaurav,让我试试。谢谢console.log
甚至在转换之前就将规则、电子邮件、远程、数据、someName1
显示为一个函数???仍在测试中。谢谢不起作用:。但随后更改为声明id
是一个变量,它确实是:。你知道为什么会有差异吗?实际上,后面的示例仍然不起作用,因为它总是返回最后一个的值(即将返回#someID2
中的值)。谢谢。我会测试一下,也可以。或者不创建新变量。请注意,我无法将函数
用作属性名。