JSON解析对象和通配符

时间:2015-10-19 08:07:29

标签: javascript jquery json

我有一个应该根据数据检查旧数据的函数。我正在解析数据和oldData以分别获取JSON对象,因为dbData和formData只是包含ID和HTMML表单值的字符串。该函数的用途是检查用户是否在HTML表单中进行了任何文本更改。我想通过检查每个textarea的ID来执行此操作,然后检查formData和Data中的值是否相同。在这种情况下,没有进行任何更改,函数将返回true。

我解析的数据字符串如下所示:

"[{\"texts\":[{\"default\":true,\"bread-texts\":false,\"textarea1\":\"Banana\",\"textarea2\":\"Kiwi\",\"textarea3\":\Apple \",\"textarea4\":\"coffe\",\"textarea5\":\"Tea\",\"signature\":true,\"profile\":\"header\",\"fontsize\":\"26\",\"fontsize-headers\":\"10.5\",\"fontcolor\":\"#0000\",\"textfont\":\"header-large\",\"textsub1\":\"Bold\",\"font\":\"ICA%20Text\",\"textsub\":\"Regular\",\"textsize\":\"20\",\"textsize-signature\":\"9.5\",\"textsizesmall\":\"5.5\",\"textsizesmall-placer\":\"2.75\",\"vers-placer\":\"false\",\"text-colored\":\"%23000000\",\"s-all-customers\":true,\"new-customers\":true,\"undefined\":\"\"}]}]"

因此,例如,我必须在dbData和formData中检查“textarea1”的ID,然后检查值是否相同。这可以使用通配符完成,还是有更好的方法来存档?

function CheckValues() {

    var isChanged = false;
    var formData = $.parseJSON(data);
    var dbData = $.parseJSON(oldData);                  
    if(formData !== dbData) {
        var isChanged = true;
    }   
    return isChanged;
}   

1 个答案:

答案 0 :(得分:1)

The code shown below works in IE9+, Chrome, FireFox but other
browsers yet to test. The example shows two different values, data and 
OldData - data contains "Tea" where as OldData contains "OldTea" so 
isChanged flag is true.
function CheckValues() {
            var data = "{\"disable\":false,\"textarea1 
            \":\"Banana\",\"textarea2\":\"Kiwi\",\"textarea3 
            \":\"Milk\",\"textarea4\":\"Coffe\",\"textarea5\":\"Tea\"}";

            var oldData = "{\"disable\":false,\"textarea1 
            \":\"Banana\",\"textarea2\":\"Kiwi\",\"textarea3 
            \":\"Milk\",\"textarea4\":\"Coffe\",\"textarea5\":\"OldTea\"}";

            var formData = JSON.parse(data);
            var dbData = JSON.parse(oldData);

            var oFormData = Object.keys(formData);
            var oDbData = Object.keys(dbData);

            var isChanged = false;
            if (oFormData.length === oDbData.length)
            {
                for (var i = 0; i < oFormData.length; i++) {
                    var propName = oFormData[i];
                    if (typeof (dbData[propName]) === "undefined") {
                        isChanged = true;
                        break;
                    }
                    else {
                        if (formData[propName] !== dbData[propName]) {
                            isChanged = true;
                            break;
                        }
                    }
                }
            }
        }