paularmstrong/normalizr 提供了将嵌套的 JSON 数据 normalize 的方法,例如:
// 转换前的数据
{
"id": "123",
"author": {
"id": "1",
"name": "Paul"
},
"title": "My awesome blog post",
"comments": [
{
"id": "324",
"commenter": {
"id": "2",
"name": "Nicole"
}
}
]
}
// 转换后的数据
{
result: "123",
entities: {
"articles": {
"123": {
id: "123",
author: "1",
title: "My awesome blog post",
comments: [ "324" ]
}
},
"users": {
"1": { "id": "1", "name": "Paul" },
"2": { "id": "2", "name": "Nicole" }
},
"comments": {
"324": { id: "324", "commenter": "2" }
}
}
}
这也可以用在列表数据中,比如一个帖子列表,可能有一个评论者在多个帖子中留言,可以将 normalized 的数据从后端传到前端,再通过前端 React 来渲染,也可以在前端 denormalized。
这种库与 React / Redux 配合起来很方便。