2017-05-31 126 views
0

这是我的JSFiddle如何修改我的JSON对象?

在点击“+​​”按钮时,有边界的表单元素被克隆并动态添加。

“保存规则”按钮会生成表单字段标签和值的JSON对象。 这是在单击“保存规则”按钮时创建的JSON对象。

{ 
     "nameRules": "", 
     "typeRules": "Type1", 
     "descriptionRules": "XYZ\n     ", 
     "elhs": "", 
     "op": "<=", 
     "erhs": "", 
     "datatype": "", 
     "joinop0": "", 
     "elhs0": "", 
     "op0": "", 
     "erhs0": "", 
     "datatype0": "" 
    } 

如何让它以下列格式创建JSON对象?

{ 
    "nameRules": "", 
    "typeRules": "Type1", 
    "descriptionRules": "XYZ\n     ", 
    "expressions": [{ 
       "elhs": "", 
       "op": "<=", 
       "erhs": "", 
       "datatype": "" 
        }, 
       { 
       "joinop0": "", 
       "elhs0": "", 
       "op0": "", 
       "erhs0": "", 
       "datatype0": "" 
       }] 
} 

任何帮助将不胜感激。 谢谢

+0

可以使用Json.Parse –

+0

作为@NayasSubramanian说,使用'JSON.parse(myJSON)',然后使用普通的javascript来编辑对象,一旦完成后,使用'JSON.stringify(myEditedObject)'将对象转换回JSON' – evolutionxbox

+0

@evolutionxbox您可以创建一个小提琴来帮我理解? –

回答

1

嗯,代码可能不漂亮,我不是在jQuery的专家,但它应该按预期工作:FIDDLE

$('button.btn:contains("Save Rules")').on('click', function(e) { 
    console.log('hhh', $('form.form-horizontal#rules').find(':input:not(button):not(#joinop)').get()); 
    var jsonData = $('form.form-horizontal#rules') 
     .find(':input:not(button):not(#joinop)').get() 
     .reduce(function(acc, ele) { 
     acc.expressions = acc.expressions||[]; 
     if (ele.closest("#container") || ele.closest('.parent-border')) { 
      if (ele.closest('.parent-border')) var i = 0; 
      else var i = $("#container .child-border").index(ele.closest(".child-border")) +1 
      acc.expressions[i] = acc.expressions[i]||{}; 
      acc.expressions[i][ele.name || ele.id] = ele.value; 
     } 
     else acc[ele.name || ele.id] = ele.value; 
     return acc; 
     }, {}); 
    console.log(jsonData); 
    alert(JSON.stringify(jsonData, null, 4)); 
    }); 
+0

哇!这工作像魔术一样。如何在nameRules,typeRules,descriptionRules之后使表达式数组显示? –

+0

只需将表达式值放入变量中并在其他操作之后将其附加到对象 - 如下所示:[EDITED FIDDLE](http://jsfiddle.net/kd5fjgnd/) –

+0

您为我做了一天。非常感谢! :D –