我有以下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()方法将所有可枚举的自身属性从一个或多个源对象复制到目标对象。它返回修改后的目标对象。