如何使用javascript中数组格式的json数据更新作为变量传递的json密钥?

如何使用javascript中数组格式的json数据更新作为变量传递的json密钥?,javascript,json,Javascript,Json,下面是我的json内容 { "demoPO":{ "login":["demoJPLog in", "demoFRLog in","GELog in"], "cancel":["demoJPCancel", "demoFRcancelo","GEcancelo"], &quo

下面是我的json内容

{
    "demoPO":{
      "login":["demoJPLog in", "demoFRLog in","GELog in"],
      "cancel":["demoJPCancel", "demoFRcancelo","GEcancelo"],
      "content":["demoJPcontent", "demoFRcontent","GEcontent"]
    },
    "demoPO2":{
      "login":["JPLog in", "FRLog in","GELog in"],
      "cancel":["JPCancel", "FRcancelo","GEcancelo"],
      "content":["JPcontent", "FRcontent","GEcontent"],
      "submit":["JPsubmit", "FRsubmit","GEsubmit"]
    }
}
我想更新keydemPO2的值。登录[0]

data.demoPO2.login[0] = value; //this updates key - works

consider user is passing **key** as a variable

var keyName = 'demPO2.login[0]'
data[keyname] = value; //doesn't update, adds a new one

有没有一种方法可以克服这个问题,用户可以将key作为变量传递,并在json中存在多级数组时进行更新?

您应该将key中元素的路径提取为
[“demPO2”,“login”,“0”]
,然后循环它:

var json={
“demoPO”:{
“登录”:[“demoJPLog in”、“demoFRLog in”、“GELog in”],
“取消”:[“demoJPCancel”、“demoFRcancelo”、“GEcancelo”],
“内容”:[“demoJPcontent”、“demoFRcontent”、“GEcontent”]
},
“demoPO2”:{
“登录”:[“JPLog in”、“FRLog in”、“GELog in”],
“取消”:[“JPCancel”、“FRcancelo”、“GEcancelo”],
“内容”:[“JPcontent”、“FRcontent”、“GEcontent”],
“提交”:[“JPsubmit”、“FRsubmit”、“GEsubmit”]
}
};
函数提取(键){
var keys=key.split('.');
var-current=json;
对于(变量i=0;ilog(extract('demoPO2.key.notExists')
您可以使用
lodash
\uu.set
方法

从“洛达斯”进口


_.set(数据,“demoPO2.login[0],“test1”)

这里的钥匙是什么?您正在更新数组而不是对象。如果您通过demPO2,这很好,但是通过demPO2.login[0]作为密钥不是一个可行的解决方案谢谢,但这里它正在提取密钥,但我的要求是更新密钥的值