如何使用JQ将多JSON对象转换为指定键值对结构?
解决方案
首先要注意:你给出的原始内容是两个独立的JSON对象,不符合合法JSON结构,需要先将它们整理为对象数组(或者先解析成数组形式的JS对象),才能进行后续转换。
步骤1:整理原始数据
假设你的数据已经是JS数组格式:
const originalData = [ { "name": "abc", "version": "1234" }, { "name": "xyz", "version": "6789" } ];
如果是字符串形式的非法JSON,可以先修复并解析:
const rawJsonStr = `{"name": "abc","version": "1234"}{"name": "xyz","version": "6789"}`; // 把两个对象的连接处替换为数组分隔符,再包裹成数组 const parsedData = JSON.parse(`[${rawJsonStr.replace(/}{/g, '},{')}]`);
步骤2:用reduce实现转换
使用reduce方法可以直接生成目标格式的对象:
const result = parsedData.reduce((acc, item) => { acc[item.name] = item.version; return acc; }, {}); console.log(result); // 输出:{ "abc": "1234", "xyz": "6789" }
代码说明
reduce的初始值是一个空对象{},作为累加器acc的起始状态。- 遍历数组时,将每个对象的
name作为键、version作为值,添加到累加器中。 - 每次迭代返回更新后的累加器,最终得到目标结构的对象。
内容的提问来源于stack exchange,提问作者Yogi
相关产品推荐
相关产品推荐

