存在哪些JavaScript对象到对象映射库?

时间:2012-05-21 11:49:11

标签: javascript mapping

我目前正在开发一个大型JavaScript项目,我正在努力将JSON数据(从后端)映射到我自己的JavaScript对象。

我正在使用Knockout JavaScript MVVM框架,虽然它包含mapping plugin,但它不允许我实际重新映射属性。我想实现这一点,因为包含JSON数据的过于细粒度,我想'压扁'我的JS对象。下面是一个例子。

Incomming data。

Object : {
    Description: {
        Id : 1,
        Title : 'ProductX'
    },
    Price : {
        Last : 12,
        Currency : 3
    }
}

我想将其重新映射/展平为:

var mappedObject = {
    id : 1,
    title: 'ProductX',
    price : 12,
    currency : 3
}

因此我想提供一个映射配置,详细说明应该将哪些属性映射到哪些传出属性。与配置Dozer非常相似。

我的问题是:是否有任何图书馆能够实现我想要实现的目标,还是这需要我建立自己的图书馆?

4 个答案:

答案 0 :(得分:7)

好吧,我认为没有任何库,因为这听起来很容易。

以下是一个例子:

var obj = {
    Description: {
        Id : 1,
        Title : 'ProductX'
    },
    Price : {
        Last : 12,
        Currency : 3
    }
},
    mappedObject = {};

function mapThat( obj, mappedObject ) {
    Object.keys( obj ).forEach( function( key ) {
        if ( typeof obj[ key ] === 'object' ) {
            // If it's an object, let's go recursive
            mapThat( obj[ key ], mappedObject );
        }
        else {
            // If it's not, add a key/value
            mappedObject[ key.toLowerCase() ] = obj[ key ];
        }
    } );
}

mapThat( obj, mappedObject );

console.log( mappedObject );​

在这里演示:http://jsfiddle.net/qG6hm/

答案 1 :(得分:7)

自上次更新此主题以来已有一段时间了。由于人们现在可能仍在搜索对象到对象的映射器:

去年,我已经为这种情况创建了一个C#AutoMapper实现的端口到TypeScript / JavaScript。我把代码放在GitHub(https://b.ldmn.nl/AutoMapperTS)。您也可以使用automapper-ts NPM或Bower包直接使用库。

图书馆几乎完全记录在案。此外,已有相当多的Jasmine单元测试可用(代码覆盖率约为95%)。他们应该为您提供一些您需要的解释。

我希望这个库适合您的需求。如果您有任何问题和/或评论,请不要犹豫与我联系!

答案 2 :(得分:3)

实际上,knockoutjs映射插件允许你这样做:

ko.mapping.fromJS调用中,您可以提供一个映射对象,用于映射包含的属性......

var mapper = {
    create: function(options){
        return { name: ko.observable(options.data.name) };
    }
};

这意味着将此映射器与映射插件一起使用时,每个对象将被展平为一个仅包含其名称作为可观察对象的对象。

你这样使用它:

var viewModel = ko.mapping.fromJS({id: 1, name: "a", desc: "b"}, mapper);

在这种情况下,viewModel只会有一个属性名称。

您可以在官方文档here中了解有关此功能的更多信息。

答案 3 :(得分:0)

  1. 您可以使用Object-mapper,这是用于Javascript / JSON中对象映射的非常基本和简单的库。 使用此库时,需要在单独的文件中指定映射属性组合以及源和目标类型。

  1. 还有另一个库AutoMapper,该库稍有高级。它可以根据属性名称自动处理映射,但是您仍然可以提及自定义映射,但这种方法并非一帆风顺。 如果您来自.net背景,则该库的实现方式与C#自动映射器相同。