如何在JSON对象中包含空值作为占位符
本文关键字:空值 占位符 包含 JSON 对象 | 更新日期: 2023-09-27 18:02:34
我的项目将使用HTML 5, &jQuery移动端前端,并通过AJAX传递JSON数据返回&然后是c# ASP。. NET后端与MySQL数据库对话(下面的例子还没有显示任何后端c#、MySQL或AJAX代码)。
我已经弄清楚了我的JSON对象(字符串?)将是什么样子,这里是一个简化的版本,以节省空间:
{
"Events": {
"Common": {
"User": "string",
"PCBID": 52759,
"Notes": "string"
},
"Assign": {
"SBEPN": "string",
"SBEJobNumber": "string",
"SBESerialNumber": "string",
"SBEModelNumber": "string"
}
}
}
对于每个事件,公共节点将始终被填充,并且根据事件类型(分配、创建、修改等),一些数据将被填充,而其余可用变量将不被填充。为简洁起见,我只包含了Assign节点,但在它下面还有其他五个更复杂的节点。
我想我可以在JS中预分配变量到null
或JSONObject.NULL
,然后使用一个三元语句来分配它的真实值,如果由用户提供,或者让它为空。我的想法是,我不需要在c#代码中有一堆重载,我可以传入一个大的JSON blob,并根据填充或为空的内容找出如何处理它。下面是我尝试声明变量的一种方式:
var user = JSONObject.NULL;
var pcbid = JSONObject.NULL;
var notes = JSONObject.NULL;
etc...
这些显示为JSONObject undefined,如果我将它们声明为null,像这样:
var user = null;
var pcbid = null;
var notes = null;
etc...
在JSON中显示为未定义而不是null。
这是我如何分配字符串给变量:
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;
这里是一个工作小提琴与所有不同的变量&事件定义。
在这个示例中,我故意只填充了两个字段,以简化测试。我希望得到一个可以(最终)交给AJAX的JSON对象,但是我遗漏了一些东西。我也怀疑JSONObject.NULL
可能不是Javascript结构,因为我实际上只能在Android中找到它的引用。Java文档,但它似乎仍然像我应该能够使用null
在它的地方?所以,我的问题是,我怎么能得到空值到JSON对象作为占位符的文本/int/布尔值,可能会或可能不会由用户填充?
编辑以显示功能代码(参见上面的fiddle链接中的完整示例):
声明JS对象:
var pcbClientEvent = {
eventType: {
common: {
user: null,
pcbid: null,
notes: null
},
assign: {
sbePN: null,
sbeJobNumber: null,
sbeSerialNumber: null,
sbeModelNumber: null
}
}
};
并在表单填写完成后对其进行操作(参见上面的fiddle链接中的完整示例):
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;
JSON 是一种轻量级数据交换格式。从JSON的角度来考虑应用程序的数据模型可能会有所帮助,但它并不意味着在代码中直接操作的东西。更自然的做法是声明和修改运行时对象,将其序列化为JSON以进行传输,然后解析它以在接收端实例化等效的运行时对象。JSON.net只是众多面向ASP的优秀JSON库之一。. NET后端。
特别是关于空值,这些在JSON中直接支持。例如,考虑这个Javascript对象:
var myObject = {
a: "a string",
b: 73,
n : null
};
执行JSON的结果。myObject
上的stringify是:
{ "a": "a string", "b": 73, "n": null }
方法应该是操作运行时对象并生成JSON,而不是组装JSON文本片段。
尝试修改您的示例,以在Javascript中构建一个具有代表性的运行时对象,并直接设置您的值,包括null
值。如果模型中有一个节点应该以JSON表示,但完全为空(所有null
值),只需确保在模型的该位置分配一个合适的占位符对象。然后使用JSON.stringify
查看结果是否符合您的期望。