使用JSON格式

时间:2016-10-08 08:35:15

标签: javascript mysql json node.js rest

我有以下 MySQL 表:

| category | icon |
-------------------
| CAT_A    | xxx  |
| CAT_B    | yyy  |

| sub_category | icon | category
--------------------------------
| SUB_X        | ppp  | CAT_A
| SUB_Y        | qqq  | CAT_A
| SUB_Z        | rrr  | CAT_B
| SUB_U        | www  | CAT_B

现在我想在一个查询中获取所有数据 我正在使用 Node.JS ,我写了以下查询

  

SELECT c.category categoryTitle,c.icon categoryIcon,s.sub_category subCategoryTitle,s.icon subCategoryIcon FROM categories c INNER JOIN sub_categories s ON c.title = s.category

这是我的Node.JS代码

var arrCategories = [];
    for (var category in rows) {
         if (rows.hasOwnProperty(category))
             arrCategories.push(rows[category]);
    }
    response.json(arrCategories);

现在我收到以下响应

[
{
  "categoryTitle":"CAT_A",
  "categoryIcon":"xxx",
  "subCategoryTitle":"SUB_X",
  "subCategoryIcon":"ppp"
},
{
  "categoryTitle":"CAT_A",
  "categoryIcon":"xxx",
  "subCategoryTitle":"SUB_Y",
  "subCategoryIcon":"qqq"
},......
]

但我想要以下输出:

[
{
  "categoryTitle":"CAT_A",
  "categoryIcon":"xxx",
  "subCategory":[
      {
         "subCategoryTitle":"SUB_X",
         "subCategoryIcon":"ppp"
      },
      {
         "subCategoryTitle":"SUB_Y",
         "subCategoryIcon":"qqq"
      },
   ]
},......
]

我应该怎样做才能以所需的格式获得输出

任何帮助都是适当的

2 个答案:

答案 0 :(得分:2)

这是另一个不需要更改SQL的选项。

var categoryMap = {};
var categories = [];
rows.forEach(function(row) {
   var category = categoryMap[row.categoryTitle];
   if (!category) {
      category = {
         categoryTitle: row.categoryTitle,
         categoryIcon: row.categoryIcon,
         subCategory: []
      };

      categoryMap[row.categoryTitle] = category;
      categories.push(category);
   }

   category.subCategory.push({
     subCategoryTitle: row.subCategoryTitle,
     subCategoryIcon: row.subCategoryIcon
   });
});

response.json(categories);

答案 1 :(得分:1)

按类别和图标分组时使用GROUP_CONCAT可能会给您一个可接受的结果:

SELECT c.category                   AS categoryTitle,
       c.icon                       AS categoryIcon,
       GROUP_CONCAT(s.sub_category) AS subCategoryTitle,
       GROUP_CONCAT(s.icon)         AS subCategoryIcon
FROM categories c
INNER JOIN sub_categories s
    ON c.title = s.category
GROUP BY c.category,
         c.icon

此查询应生成Node.js应用程序的输出,如下所示:

[
{
    "categoryTitle":"CAT_A",
    "categoryIcon":"xxx",
    "subCategoryTitle":"SUB_X,SUB_Y",
    "subCategoryIcon":"ppp,qqq"
},
{
    "categoryTitle":"CAT_B",
    "categoryIcon":"yyy",
    "subCategoryTitle":"SUB_Z,SUB_U",
    "subCategoryIcon":"rrr,www"
},
...
]