提问人:TechS 提问时间:7/14/2021 最后编辑:TechS 更新时间:7/14/2021 访问量:91
将 json 转换/映射为另一种格式
Transform/map json to another format
问:
有很长的JSON对象,小部分如下:
const valueObject = {zipCode: 12345, street1: 'street 1', street2: 'street 2',city:'cityname', uniqueNum: '123456789'};
const mappingObject = {address: {pinCode: zipCode, addressLine1: 'street1', addressLine2:'street2', id: 'uniqueNum', city: city}
const formatObject = {address: {pinCode: '', addressLine1: '', addressLine2:'', id: '0', city: ''}
尝试转换为使用 .
(如果没有值,则使用默认值 from )
它没有工作。似乎有一个对象而不是数组。不知道这里出了什么问题,还是需要合并。valueObject
formatObject
mappingObject
valueObject
formatObject
Object.keys(formatObject).map((k)=>{k: valueObject[mappingObject[k]] || mappingObject[k]});
预期输出:
{address: {pinCode: 12345, addressLine1: 'street 1', addressLine2: 'street 2',city:'cityname', id: '123456789'};
如果通过 ES6 ( 否则情况下,使用 for 循环和准备对象。)
答:
1赞
daylily
7/14/2021
#1
您实际上不需要 here,因为 给出了完整的转换模式,即两个结构之间的关系。 仅作为可能输出的示例。formatObject
mappingObject
formatObject
一个可行的实现是:
function transform(schema, x) {
return Object.fromEntries(Object.entries(schema).map(([k, v]) => {
if (typeof v === 'string') return [k, x[v]]
else if (typeof v === 'object') return [k, transform(v, x)]
else throw new TypeError(`Schema entry cannot have type ${typeof v}`)
}))
}
transform(valueObject, mappingObject)
它通过模式递归地工作,将平面结构对象(在本例中)转换为嵌套结构对象。valueObject
评论
0赞
TechS
7/14/2021
谢谢,为我工作。Object.fromEntries
Object.entries
评论
formatObject
valueObject