我知道看这个问题可能很简单,但是我对对象在javascript中的反应方式有些困惑。我试图尽可能地搜索解决方案,但找不到任何解决方案。
在这里,我想发送以下json请求。 (预期输出)
{
"request": {
"command": "transaction",
"commandData":{
"type": "sale",
"amount" : 0.00,
"tenderType" : "credit",
"referenceNumber": "",
"kiosk" :{
"machineName": "string",
"clinicId": "string"
}
}
}
}
{
"request": {
"command": "close",
"commanddata":{
}
}
}
{
"request": {
"command": "status",
"commanddata":{
}
}
}
对于上述请求,我将tempJson1
,tempJson2
和tempJson3
分为三个json对象,最后将所有json对象组合并存储在名为{{1}的变量中}。
但是,当我尝试使用tempJson
时,它仅使用tempJson3而不合并所有三个json对象。
我在哪里想念?有帮助吗?
Object.assign()
var tempJson1 = {};
tempJson1.request = {};
tempJson1.request.command = "Transaction";
tempJson1.request.commandData = {};
tempJson1.request.commandData.type = "sale";
tempJson1.request.commandData.amount = document.getElementById("amount").value || "";
tempJson1.request.commandData.tendertype = document.getElementById("tendertype").value || "";
//tempJson.request.requireToken = document.querySelector('.consent').checked;
tempJson1.request.commandData.referenceNumber = "";
tempJson1.request.kiosk = {};
tempJson1.request.kiosk.machineName = document.getElementById("machineName").value || "";
tempJson1.request.kiosk.clinicId = document.getElementById("clinicId").value || "";
var tempJson2 ={};
tempJson2.request = {};
tempJson2.request.command = "close";
tempJson2.request.commandData = {};
var tempJson3 = {};
tempJson3.request = {};
tempJson3.request.command = "status";
tempJson3.request.commandData = {};
var tempJson = Object.assign({},tempJson1,tempJson2, tempJson3);
//var tempJson = tempJson1.concat(tempJson2);
console.log(tempJson);
console.log("tempJson = " + JSON.stringify(tempJson));
PS:需要使用纯JavaScript且没有ES6的解决方案。
答案 0 :(得分:1)
好吧,如果我的问题正确,看来您想发送3个数据块作为JSON有效负载以用于HTTP请求。块是:
{
"request": {
"command": "transaction",
"commandData":{
// ...
}
}
}
{
"request": {
"command": "close",
"commandData":{
}
}
}
{
"request": {
"command": "status",
"commandData":{
}
}
}
但这是not a valid JSON。您必须具有一个实体(在这种情况下为对象或数组)作为根元素。因此,我可以想到以下可能的解决方案:
发送3个分离的HTTP请求,每个请求中带有一个“请求” JSON对象。
如果您需要在一个请求中发送所有三个请求,则必须以某种方式对其进行分组。 例如:
2.1。数组
[
{
"request": {
"command": "transaction",
"commandData":{
// ...
}
}
},
{
"request": {
"command": "close",
"commandData":{
}
}
},
{
"request": {
"command": "status",
"commandData":{
}
}
}
]
// so the code would be:
var tempJson = [tempJson1, tempJson2, tempJson3];
2.2。具有不同命名属性的对象:
{
"transaction": {
"request": {
"command": "transaction",
"commandData":{
// ...
}
}
},
"close": {
"request": {
"command": "close",
"commandData":{
}
}
},
"status": {
"request": {
"command": "status",
"commandData":{
}
}
}
}
// so the code would be:
var tempJson = {
transaction: tempJson1,
close: tempJson2,
status: tempJson3
};
2.3。或这些的某种组合。
答案 1 :(得分:0)
在一个对象中不能一次又一次拥有相同的键。“ request”键在同一对象内三次使用。因此它将替换前两个对象。