2017-01-20 37 views
1

所以,我从服务器获取一个JSON响应,看起来像:如何使用normalizr来压扁具有不同类型对象的数组?

{ 
    data: [ 
    { id: 1, type: 'person', emails: [ { id: 1 }, { id: 3 } ], phones: [] }, 
    { id: 2, type: 'person', emails: [ { id: 2 } ], phones: [ { id: 2 } ] }, 
    { id: 3, type: 'person', emails: [ { id: 4 } ], phones: [ { id: 3 }, { id: 3 }] } 
    ], 
    included: [ 
    { id: 1, type: 'emails', ... }, 
    { id: 2, type: 'emails', ... }, 
    { id: 3, type: 'emails', ... }, 
    { id: 4, type: 'emails', ... }, 
    { id: 1, type: 'phones', ... }, 
    { id: 2, type: 'phones', ... }, 
    { id: 3, type: 'phones', ... } 
    ] 
} 

data属性是接触的数组objeccts都具有相同的结构。每个联系人对象都有一组相关的电子邮件和电话。

included属性是所有类型的相关对象的数组,这意味着它们可以共享和ID或甚至有不同的对象结构。

我期待尝试和扁平化的反应是比较容易的工作,并像:

{ 
    entities: { 
     contacts: [ ... ], 
     emails: [ ... ], 
     phones: [ ... ] 
    }, 
    result: [ 1, 2, 3 ] 
} 

我已经成功使用正常化刚刚接触数据:

const contactSchema = new schema.Entity('contacts'); 
const contactListSchema = [ contactSchema ]; 
const normalizedData= normalize(response, contactListSchema); 

但这显然不包括entities中的电子邮件或电话。

我实际上并不知道这个库是否能够达到我想要实现的目标,但任何帮助将不胜感激。

虽然不基于上述数据,但API基于jsonapi.org模式,因此主页上的示例与结构完全匹配。

回答

1

我居然发现专门设计在原有基础上normalizr做这个库:

https://github.com/stevenpetryk/jsonapi-normalizer

希望这可以帮助别人的未来!

+0

是的,你可以尝试使用normalizr,但JSONAPI是它自己的一个完整的混乱与部分规范化的反应,实际上非常难以合作。我会打开一张票来引用normalizr文档中的jsonapi-normalizr,因为这经常出现。 –

+0

@PaulArmstrong谢谢,是的,我一直在努力工作与JSON API响应,这就是为什么这将节省我很多时间! –

相关问题