2012-07-26 70 views
0

我有下面的JSON,需要迭代通过“规则”对象。我似乎永远无法正确地调用它来访问不仅仅是最后一条规则。实施json迭代

如果有人能在正确的方向指向我,我会非常感激

var rules = [{ 
"rule":[{ 
    "fields":["CASE.PROSECUTED_FLAG","CASE.RESTITUTION_SIGNED"], 
    "conditions":["N","Y"], 
    "actions":"required", 
    "action_fields":["test1","test2"] 
}], 
"rule":[{ 
    "fields":["CASE.PROSECUTED_FLAG","CASE.RESTITUTION_SIGNED"], 
    "conditions":["N","N"], 
    "actions": "required", 
    "action_fields": ["test3", "test4"] 
}], 
"rule":[{ 
    "fields":["CASE.PROSECUTED_FLAG"], 
    "conditions":["Y"], 
    "actions": "required", 
    "action_fields": ["test5"] 
}] 
}]; 




function rulesControl() { 
    alert(rules.length); 
    for (var rule in rules) { 

    var xfields = rules[rule].rule.fields; 
    var conditions = rules[rule].rule.conditions; 
    var actions = rules[rule].rule.actions; 
    var action_fields = rules[rule].rule.action_fields; 

    //test the fields (if success, mark them, else clear them) 
    if (validateRule(xfields, conditions)) { 
     rulesAction(actions, action_fields); 
    } else { 
     ruleActionMakeClear(action_fields); 
    } 
    } 
} 
+2

在json对象中,是否真的可以有几个具有相同名称(“规则”)的属性?改用数组。嗯...也许这是一个答案... – LosManos 2012-07-26 19:27:36

+1

你不应该使用'for..in'来迭代一个数组。 – ThiefMaster 2012-07-26 19:30:46

回答

1

这是因为JSON奇怪地形成。它三次定义了包含对象的属性“规则”,实质上是覆盖本身。这可能更符合你的要求,而不是将所有这些单个项目数组嵌套在对象中。

var rules = [ 
{"rule": 
    { 
    "fields":["CASE.PROSECUTED_FLAG","CASE.RESTITUTION_SIGNED"], 
    "conditions":["N","Y"], 
    "actions":"required", 
    "action_fields":["test1","test2"] 
    } 
}, 
{"rule": 
    { 
    "fields":["CASE.PROSECUTED_FLAG","CASE.RESTITUTION_SIGNED"], 
    "conditions":["N","N"], 
    "actions": "required", 
    "action_fields": ["test3", "test4"] 
    } 
}, 
{"rule": 
    { 
    "fields":["CASE.PROSECUTED_FLAG"], 
    "conditions":["Y"], 
    "actions": "required", 
    "action_fields": ["test5"] 
    } 
} 
]; 

你会因为访问此:

rules[i].rule.PROPERTY 

其中i是该规则的索引值和属性字段,条件等

+0

谢谢,这个伎俩 – LostBoy 2012-07-27 13:31:01

0

你只能有一个rule关键的原因,为什么你看到的最后一个规则不仅是因为规则相互覆盖和最后一个是剩下的,我建议使用一个数组来存储规则。

1

你缺少花括号...

var rules = [{"rule":[{}] 
     },{ // You are missing this curly braces. 
     "rule":[{}]}, 
     {"rule":[{}]}];