将数组元素添加到Javascript中的JSON元素中



我有以下JSON:

var json = {
"paramh": "",
"language":"EN",
"modeinsert": false,
"material": {
"numberOfContainers": 0,
"totalQuantity": 0,    
"pkMaterialid": 1106,    
"fkStoragecondid": "NORMAL",
"materialdesc": "Desc",
"fkMatsafety": null,
"fkMatsop": null,
"materialLot": [],
"materialMember": [
{
"pkmaterialid": 1106,
"pkMatclassid": "ID_Matclass"
}
],
}}

还有一个元素是

var jsonProp =
{
"materialPropAssigned": [
{
"pkMaterialid": "1106",
"pkMatpropid": "FLAMMABLE",
"matpropnumvalue": "null",
"matpropstrvalue": "Y"
},
{
"pkMaterialid": "1106",
"pkMatpropid": "HAZARDOUS",
"matpropnumvalue": "null",
"matpropstrvalue": "Y"
}
]
}

我只是想在json中添加这个jsonProp。所以json将是元素" Material "的数组元素。

结果必须是:

var json = 
{
"paramh": "",
"language":"EN",
"modeinsert": false,
"material": {
"numberOfContainers": 0,
"totalQuantity": 0,    
"pkMaterialid": 1106,    
"fkStoragecondid": "NORMAL",
"materialdesc": "Desc",
"fkMatsafety": null,
"fkMatsop": null,
"materialLot": [],
"materialMember": [
{
"pkmaterialid": ID,
"pkMatclassid": ID_Matclass
}
],
"materialPropAssigneds": [            
{
"pkMaterialid": "1106",
"pkMatpropid": "FLAMMABLE",
"matpropnumvalue": null,
"matpropstrvalue": "Y"
},
{
"pkMaterialid": "1106",
"pkMatpropid": "HAZARDOUS",
"matpropnumvalue": null,
"matpropstrvalue": "Y"
}      
]
}
}

I tried:json.material["materialPropAssigned"]=jsonProp;

问题是它在同一个元素中创建了一个新元素:

"materialPropAssigned": {
"materialPropAssigned": [
{
"pkMaterialid": "1106",
"pkMatpropid": "FLAMMABLE",
"matpropnumvalue": "null",
"matpropstrvalue": "Y"
}
]
},

我不能编辑这个jsonProp来消除* "materialPropAssigned":*,因为它来自我的代码的外部部分。

我该如何解决这个问题?

你的jsonProp是一个对象,里面有一个属性叫做materialPropAssigned。如果你把这个赋值给json.material["materialPropAssigned"],这个对象最终会在那个键中结束,而不是它唯一属性的属性。

如果你想保留原始对象中的项并使用新值覆盖,也许可以使用ES6中的扩展语法?

json.material["materialPropAssigned"] = {...json.material["materialPropAssigned"], ...jsonProp.materialPropAssigned}`

更简单的版本是直接执行

json.material["materialPropAssigned"] = jsonProp.materialPropAssigned

将整个materialPropAssigned属性替换为jsonProp

中的对象根据您的用例,这也可能是一件好事,但我敦促您深入研究对象在JavaScript中的工作方式。

json.material = {...json.material, ...jsonProp}

我认为你不应该分配整个jsonProp应该像这样分配它的子元素:

json.material.materialPropAssigned = jsonProp.materialPropAssigned
Object.assign(json, jsonProp )
object. assign()方法将所有可枚举的自身属性从一个或多个源对象复制到目标对象。它返回修改后的目标对象。

最新更新