Javascript 如何动态映射JSON密钥
因此,我有一个来自API调用的初始JSON对象。我需要将此数据映射到第二个JSON对象,然后应用程序将使用该对象。 API调用的初始对象如下所示Javascript 如何动态映射JSON密钥,javascript,json,data-structures,mapping,Javascript,Json,Data Structures,Mapping,因此,我有一个来自API调用的初始JSON对象。我需要将此数据映射到第二个JSON对象,然后应用程序将使用该对象。 API调用的初始对象如下所示 const initialData = { "PersonId": 1234, "Surname": "Blogs", "Forename": "Joe" } 它需要像这样被前端消费 {
const initialData = {
"PersonId": 1234,
"Surname": "Blogs",
"Forename": "Joe"
}
它需要像这样被前端消费
{
"IdNumber": 1234,
"Last_name": "Blogs",
"First_name": "Joe"
}
最初我写了这个
const mappedData = (initialData) => {
return {
"IdNumber": initialData.PersonId,
"Last_name": initialData.Surname,
"First_name": initialData.Forename
}
}
问题在于缺乏灵活性。如果要更改initialData中某个密钥的名称(例如,有人进入数据库并决定Forename应为FirstName),则我拉入的数据不再正确映射,我的应用程序将中断。
有人能解释一下如何/如果可以动态地做到这一点吗
谢谢 首先,我建议您和您团队中的人员不要更改数据库条目的名称,并且找不到任何人这样做的明确原因。但是,如果确实要更改名称,最好的做法是在前端和后端都更改条目的名称 如果您仍然希望动态执行此操作,一个好方法是:
函数changeObjectNames(initialData){
const keys=Object.keys(initialData);
返回{
“IdNumber”:初始数据[键[0]],
“姓氏”:初始数据[键[1]],
“名字”:初始数据[键[2]]
}
}
我提出的解决方案存在一个问题:数据可能以错误的顺序出现。就目前而言,这是我能提供的最好答案。因此,我建议您不要尝试更改数据库条目的名称,除非绝对必要。首先,我建议您和您团队中的人员不要更改数据库条目的名称,并且找不到任何人这样做的明确原因。但是,如果确实要更改名称,最好的做法是在前端和后端都更改条目的名称 如果您仍然希望动态执行此操作,一个好方法是:
函数changeObjectNames(initialData){
const keys=Object.keys(initialData);
返回{
“IdNumber”:初始数据[键[0]],
“姓氏”:初始数据[键[1]],
“名字”:初始数据[键[2]]
}
}
我提出的解决方案存在一个问题:数据可能以错误的顺序出现。就目前而言,这是我能提供的最好答案。因此,我建议您不要尝试更改数据库条目的名称,除非这是绝对必要的。如果您开始更改内容的值,任何事情都会中断,这就是您在数据库和应用程序之间建立协议的原因。只是不要更改名称。完全同意你的意见,但这是一项要求。我只是想让它尽可能健壮。简单的答案是,计算机不理解这种情况。但您可以检查熟悉的名称(例如,检查密钥名称,如FirstName、FirstName、FirstName等),并相应地设计应用程序。您可以将密钥映射外部化为对象变量,并使您的函数依赖于该变量,但您仍然会遇到相同的问题。如果后端密钥发生更改,您仍然需要在地图中更改它。如果您开始更改内容的值,任何事情都会中断,这就是为什么您要在数据库和应用程序之间建立协议的原因。只是不要更改名称。完全同意你的意见,但这是一项要求。我只是想让它尽可能健壮。简单的答案是,计算机不理解这种情况。但您可以检查熟悉的名称(例如,检查密钥名称,如FirstName、FirstName、FirstName等),并相应地设计应用程序。您可以将密钥映射外部化为对象变量,并使您的函数依赖于该变量,但您仍然会遇到相同的问题。如果后端密钥发生更改,您仍然需要在地图中对其进行更改。根据他们的要求,这是一个可靠的答案,但比他们目前所做的更糟糕(因为您解释了有关订单的原因)。所以我不推荐这个,我完全同意你,琳达。我既不推荐也不在生产中使用。谢谢阿诺德。我也接受这个想法,并感谢您的回答。但是,正如您所说,数据可能以不同的顺序出现,因此我不能接受这一回答。根据他们的要求,这是一个可靠的答案,但比他们目前正在做的更糟(因为您解释了有关顺序的原因)。所以我不推荐这个,我完全同意你,琳达。我既不推荐也不在生产中使用。谢谢阿诺德。我也接受这个想法,并感谢您的回答。但是,正如您所说,数据可能会以不同的顺序出现,因此我不能接受这个答案