Transform/map 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: ''}
正在尝试使用 mappingObject
将 valueObject
转换为 formatObject
。
(如果 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 循环并准备对象。 )
你实际上不需要这里的formatObject
因为mappingObject
给出了完整的转换schema,即两个结构之间的关系。 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
)转换为嵌套结构对象。
长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: ''}
正在尝试使用 mappingObject
将 valueObject
转换为 formatObject
。
(如果 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 循环并准备对象。 )
你实际上不需要这里的formatObject
因为mappingObject
给出了完整的转换schema,即两个结构之间的关系。 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
)转换为嵌套结构对象。