2017-05-31 75 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 –