将 json 转换/映射为另一种格式
Posted
技术标签:
【中文标题】将 json 转换/映射为另一种格式【英文标题】:Transform/map json to another format 【发布时间】:2021-09-22 18:44:06 【问题描述】:有很长的 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
,只需要从 valueObject
中选择值。
【参考方案1】:
这里实际上不需要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
)转换为嵌套结构对象。
【讨论】:
谢谢,Object.fromEntries
和 Object.entries
为我工作。以上是关于将 json 转换/映射为另一种格式的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 nsdateformatter 将 nsdate 转换为另一种格式
如何将字符串类型的日期转换为另一种日期格式。 |颤振 |飞镖[重复]