2014-05-09 36 views
0

我的項目將使用一個HTML 5,& jQuery Mobile前端,並通過AJAX將JSON數據傳回&,然後轉到與MySQL數據庫交談的C#ASP.NET後端(下面的示例不顯示任何後端C#, MySQL或AJAX代碼)。如何在佔位符中包含JSON對象中的空值?

我已經想通了什麼我的JSON對象(?字符串)會的樣子,這裏是一個簡化版本,以節省空間:

{ 
    "Events": { 
     "Common": { 
      "User": "string", 
      "PCBID": 52759, 
      "Notes": "string" 
     }, 
     "Assign": { 
      "SBEPN": "string", 
      "SBEJobNumber": "string", 
      "SBESerialNumber": "string", 
      "SBEModelNumber": "string" 
     } 
    } 
} 

對於每一個事件,公共節點總是會根據事件類型(分配,創建,修改等),一些數據將被填充,剩下的可用變量將不會被填充。爲了簡潔起見,我只包含Assign節點,但下面還有五個更復雜的節點。

我想我可以預先將JS中的變量分配給nullJSONObject.NULL,然後使用三元語句將其賦值爲真值(如果由用戶提供)或將其保留爲空。這個想法是,我不必在後面的c#代碼中產生一堆重載,我只需傳入一大堆JSON,並根據已填充的內容或留空即可找出如何處理它。這裏有一種方法我試過來聲明變量:

var user = JSONObject.NULL; 
var pcbid = JSONObject.NULL; 
var notes = JSONObject.NULL; 
etc... 

這些顯示爲JSONObject的不確定,如果我不是聲明爲空,這樣的:

var user = null; 
var pcbid = null; 
var notes = null; 
etc... 

它們顯示爲未定義而不是無論我是否使用JSON.stringify它們。

這是我如何分配字符串變量:

user = $("#input_common_user").val() !== null ? $("#input_common_user").val() : JSONObject.NULL; 
pcbid = $("#input_common_pcbid").val() !== null ? $("#input_common_pcbid").val() : JSONObject.NULL; 
notes = $("#input_common_notes").val() !== null ? $("#input_common_notes").val() : JSONObject.NULL; 

這裏的a working fiddle with all the various variables & events defined

我故意只在這個例子中填充兩個字段來簡化測試。我希望得到一個JSON對象,我可以(最終)將它交給AJAX,但我錯過了一些東西。我也懷疑JSONObject.NULL可能不是Javascript構造,因爲我實際上只能在Android & Java文檔中找到它的參考,但它仍然看起來像我應該能夠在它的地方使用null

所以,我的問題是,我怎樣才能得到null值到一個JSON對象作爲佔位符的文本/ ints /布爾值,可能會或可能不會填充的用戶?

編輯顯示功能代碼(請參閱完整的例子在上面的小提琴鏈接):

要聲明我的JS對象:

var pcbClientEvent = { 
    eventType: { 
     common: { 
      user: null, 
      pcbid: null, 
      notes: null 
     }, 
     assign: { 
      sbePN: null, 
      sbeJobNumber: null, 
      sbeSerialNumber: null, 
      sbeModelNumber: null 
     } 
    } 
}; 

並對其進行操作後,表格已經填寫(見完整例如在小提琴鏈路以上):

pcbClientEvent.eventType.common.user = $("#input_common_user").val() !== undefined ? $("#input_common_user").val() : pcbClientEvent.eventType.common.user; 
pcbClientEvent.eventType.common.pcbid = $("#input_common_pcbid").val() !== undefined ? $("#input_common_pcbid").val() : pcbClientEvent.eventType.common.pcbid; 
pcbClientEvent.eventType.common.notes = $("#input_common_notes").val() !== undefined ? $("#input_common_notes").val() : pcbClientEvent.eventType.common.notes; 
pcbClientEvent.eventType.assign.sbePN = $("#input_assign_sbePN").val() !== undefined ? $("#input_assign_sbePN").val() : pcbClientEvent.eventType.assign.sbePN; 
pcbClientEvent.eventType.assign.sbeJobNumber = $("#input_assign_sbeJobNumber").val() !== undefined ? $("#input_assign_sbeJobNumber").val() : pcbClientEvent.eventType.assign.sbeJobNumber; 
pcbClientEvent.eventType.assign.sbeSerialNumber = $("#input_assign_sbeSerialNumber").val() !== undefined ? $("#input_assign_sbeSerialNumber").val() : pcbClientEvent.eventType.assign.sbeSerialNumber; 
pcbClientEvent.eventType.assign.sbeModelNumber = $("#input_assign_sbeModelNumber").val() !== undefined ? $("#input_assign_sbeModelNumber").val() : pcbClientEvent.eventType.assign.sbeModelNumber; 

回答

1

JSON是輕量級的數據交換用於墊。從JSON的角度考慮應用程序的數據模型可能會有所幫助,但它並不意味着是在代碼中直接操作的東西。更自然的聲明和修改運行時對象,它序列化到JSON用於運輸和解析它來實例化在接收側的等效運行時對象。 JSON.net只是用於應用程序的ASP.NET後端的衆多優秀JSON庫之一。具體地相對於空值

,這些被直接支撐在JSON。例如,考慮這個Javascript對象:

var myObject = { 
    a: "a string", 
    b: 73, 
    n : null 
}; 

myObject執行JSON.stringify的結果是:

{ "a": "a string", "b": 73, "n": null } 

的做法應該是操縱你的運行對象並生成JSON,而不是組裝JSON的片段文本。

嘗試重新加工您的例子建立在Javascript中有代表性的運行對象,並直接設置你的價值觀,null值包括在內。如果模型中的節點應該在JSON,但完全是空的(所有null值)來表示,只要確保在模型中的那個位置分配合適的佔位符對象。然後使用JSON.stringify來查看結果是否符合您的期望。

+0

由於喬爾,你幫助清理我的一個根本性的誤解。我花了幾個小時,以找出如何創建JS對象(而不是一個JSON對象真的有沒有這樣的事),然後從我的表單輸入填充它,但我有現在的工作。我已經更新了OP中的小提琴,我將用工作代碼更新OP。再次感謝。 – delliottg

+0

@delliottg樂於助人。 –

相關問題