node.js正确扩展json对象

时间:2017-10-06 07:37:35

标签: javascript json node.js exchangewebservices

我目前正在项目中使用node-ews通过node.js访问Exchange Web服务器。现在我遇到了一个奇怪的问题。例如,运行" CreateItem"请求,例如,可以是电子邮件或约会,我给函数的参数作为类似于此的json

var args = {
    "attributes" : {
        "SendMeetingInvitations" : "SendToAllAndSaveCopy"
    },
    "SavedItemFolderId": {
        "DistinguishedFolderId": {
            "attributes": {
                "Id": "calendar"
            }
        }
    },
    "Items" : {
        "CalendarItem" : {
            "Subject" : "",
            "Body" : {
                "attributes" : {
                },
                "$value" : ""
            },
            "ReminderIsSet" : "true",
            "ReminderMinutesBeforeStart" : "30",
            "Start" : "",
            "End" : "",
            "IsAllDayEvent" : "false",
            "LegacyFreeBusyStatus" : "Busy",
            "Location" : ""
        }
    }
};

作为REST-API,我写的将接收像Subject,Start,End等属性。我最初从JSON中删除了那些,并且稍后会定义它们

args.Items.CalendarItem.Subject = req.body.Subject;

奇怪的是,这会使node-ews的内部验证失败,并告诉我CalendarItem有一个无效的Child Subject。如果我在初始args中留下Subject als一个空字符串,稍后更改它将其设置为req.body.Subject它可以正常工作。

我的问题是:如果我稍后添加属性,对象会有所不同吗?如果是,有没有办法做到这一点?因为我不认为它是在我的对象中拥有一堆空属性的最佳方法,如果它们没有被使用并为所有这些属性定义标准值,即使api不需要它们也是如此发送。

如果有人知道答案会很棒。希望我能澄清问题是什么

1 个答案:

答案 0 :(得分:0)

确定,

所以问题似乎就是这个。在内部,JSON“对象”似乎具有基于定义变量的顺序的顺序。在JavaScript中这没有问题。但是当解析xml时,最后定义的标记也将位于xml的末尾,所以如果你有

   <someTag>
     <variable2 />
     <variable3 />
   </someTag>

你可以通过someTag.variable1 = x将variable1添加到你的json中,最后在node-ews解析之后xml将会是这样的

   <someTag>
     <variable2 />
     <variable3 />
     <variable1 >x</variable1>
   </someTag>

现在很遗憾,交换网络服务器似乎对xml标签的顺序很挑剔。所以当你构建你的json时一定要使用直接命令。稍后更改json的内容不会影响订单。