JavaScript: Data Normalizer

 20th August 2020 at 2:19pm

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 配合起来很方便。