使用nodejs中的模式映射json对象

时间:2018-04-12 06:57:10

标签: json node.js mapping lodash

我正在使用nodejs。

我遇到以下问题 -

有一个非常大的json对象,我希望将其映射到一个更小的对象,该对象具有我将在稍后使用的特定格式。

我想拥有可以在该大对象上使用的特定模式,每个模式都有自己的用途。我希望能够通过这些模式自定义结构,而不是其他地方。

我正在寻找一个可以帮助我的图书馆。

我通过npm发现了一个名为deep-map的东西。

Hangfire

我玩了一下它似乎回答了我的基本需求。

但我也需要做一些更复杂的映射。

简化示例 -

myArr

我需要查看type仅针对x等于router.route('/').get((request, response) => { var promise = function() { return new Promise(function(resolve, reject) { let collection = [] Item.find({}, function (err, data) { if (!err) { data.forEach((item) => { User.findOne({_id: item.seller}, function (err, res) { if (!err) { let parse = JSON.parse(JSON.stringify(item)) let filter switch (item.category) { case 'Relics & Antiques': filter = 'antique' break case 'Coin & Currency': filter = 'currency' break case 'Real Estate': filter = 'realestate' break case 'Sports Memorabilia': filter = 'sports' break case 'Fine Art': filter = 'art' break case 'Jewellery': filter = 'jewel' break case 'Automobile': filter = 'auto' break } parse.rep = res.rep parse.sellerName = res.username parse.sellerAvatar = res.avatarURI parse.filter = filter collection.push(parse) } }) }) resolve(collection); } }) }); }; promise().then(function(collection) { return response.render('home/index', {item: collection}) }); }) 的名称。 所以基本上我需要为每个循环和某些术语介于两者之间。

由于深层地图使用lodash / template我认为可能有一种方法可以使用lodash的功能来解决这个问题,但到目前为止我还没有找到如何将这两者(lodash + deep-map)结合起来解决更多问题复杂的映射。

我也对其他图书馆开放,可能会帮助我解决这个问题。

1 个答案:

答案 0 :(得分:1)

Lodash有一个at method可以解决这个问题。它允许您指定field.subfieldThatsAnArray[1].subsubfield之类的内容并获取值。

对于较少的"建立在你自己的"解决方案,这里有一些技术可能也很有趣:

那里还有其他一些,但JSONPath在空间中的其他地方使用,而SelectTransform看起来很酷。