如何检查NAN是否存在于json字符串中

时间:2014-04-17 06:10:42

标签: javascript jquery json

假设我有以下函数,即以jason的形式获取jsonData,我验证var jsonData以检查NaN?

function save() {
        var jsonData = getEnteredValue(); 
        $.ajax({
            type : 'POST',
            url : 'saveSalesForecast.json',
            data : 'jsonPostData=' + jsonData,
            success : function() { //alert("success");
            }
        });
    }

我只知道如何替换NAN但不知道如何检查NAN!

jsonData = JSON.parse(jsonData.replace(/\bNaN\b/g, "null"));

这里是剩下的函数:(任何字段值都可以是字符串,数字但不应该是NAN

  function getEnteredValue() {
    var rowIds = $("#salesForecastGrid").jqGrid('getDataIDs');
    var ids=[];
    var jsonPostData = "[";

    for ( var i = 0; i <= rowIds.length-1; i++) {
    $("#salesForecastGrid").jqGrid('editCell', i, 2, false);
        var forecastedSales = parseFloat($("#salesForecastGrid")
                .jqGrid('getCell', rowIds[i], 'forecastedSales'));

        if (!((forecastedSales == "") || isNaN(forecastedSales) || (forecastedSales ==0))) {
            if (ids.indexOf(rowIds[i])==-1){
                ids.push(rowIds[i]);
                }
            }
    }



    for ( var i = 0; i <= ids.length-1; i++) {
        var forecastedSales = parseFloat($("#salesForecastGrid")
                .jqGrid('getCell', ids[i], 'forecastedSales'));
        var id = $("#salesForecastGrid").jqGrid('getCell', ids[i],
                'id');
        var date = $("#salesForecastGrid").jqGrid('getCell',
                ids[i], 'day');
        if (id < 0) {
            id = 0;
        }

        var record = "{" + "id:" + id + "," + "date:" + date + ","
                + "forecastedSales:" + forecastedSales + "}";
        jsonPostData = jsonPostData + record;
        if (i != ids.length) {
            jsonPostData = jsonPostData + ",";
        }
    }
    jsonPostData += "]";
    return jsonPostData;
}

Json Data喜欢:

"[{id:68447,date:04-17-2014,forecastedSales:8420.42},{id:68448,date:04-18-2014,‌​forecastedSales:9912.68},]"

2 个答案:

答案 0 :(得分:1)

您的问题是您手动创建JSON,因此最终会出现无效的JSON。帮自己一个忙,并使用JSON.stringify

function getEnteredValue() {
    var rowIds = $("#salesForecastGrid").jqGrid('getDataIDs');
    var ids=[];
    var data = [];

    // ...


    for ( var i = 0; i < ids.length; i++) {
        // ...

        data.push(
           {id: id, date: date, forecastedSales: forecastedSales}
        );
    }
    return JSON.stringify(data);
}

由于NaN不是JSON中的有效值,因此会自动转换为null。例如:

> JSON.stringify({a: NaN});
  "{"a":null}"

有关详细信息,请参阅Using native JSON

答案 1 :(得分:0)

JSON中不接受

NaN。 JSON规范不支持NaN作为值。即使javascript对象具有NaN值,当您序列化为JSON格式时,它也会转换为null

首先,JSON不是Javascript对象。 JSON是一种通用格式,可以被所有语言理解。