如何在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中预分配变量到nullJSONObject.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以进行传输,然后解析它以在接收端实例化等效的运行时对象。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查看结果是否符合您的期望。