2014-04-17 51 views
0

假設我有下面的函數,它以jason的形式獲取jsonData,我驗證了var jsonData來檢查NaN?如何檢查NAN是否存在於json字符串中

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數據,如:

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

爲什麼不是[isNaN()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN)? – Praveen

+0

@Praveen @Praveen對您有幫助嗎,如果回答這個問題,請使用您的評論&寫少量說明 –

+0

@FelixKling感謝您的信息..我不知道'JSON.stringify({a:NaN});'結果在''{「a」:null}''中。 – Praveen

回答

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

+0

+1有效的方法。這將有助於避免各種錯誤,謝謝。 – Praveen

+0

所以,只是你已經添加'返回JSON.stringify(數據);'我的上述功能,對吧? –

+0

那麼,你也必須改變我的答案中顯示的功能。即使用數組並將對象添加到數組(而不是構建字符串)。 –

0

NaN在JSON中是不可接受的。 JSON規範不支持NaN作爲值。即使JavaScript對象具有NaN值,當您將序列化爲JSON格式時,它也會轉換爲null

首先,JSON不是Javascript對象。 JSON是可以被所有語言理解的通用格式。

相關問題