MT記事カテゴリ用のJSON出力(子カテゴリは配列)

Posted on:2020-12-21

Movable Typeの記事でどうしてもカテゴリのJSONを出力が必要で、作ってみました。
本来Data API取得とかでやれますが、サーバ配信だったりでJSONも配信する必要があったため以下のようなコードで対応。

本来はto_jsonとか使って、カテゴリ制御したほうが良いですが子カテゴリを親直下の配列で持たせたかったので、組み方としては微妙だけど、記事として残しておく。
Data APIの取得して静的JSONにするプラグインは年末作ろうかなと思いました。(フィルタとかも制御したいし)
作ったコードは、このような感じになります。自分用のメモとして残しておきます。

大体必要なデータはセットしたつもりです。

mtml
[
<mt:TopLevelCategories>
<mt:CategoryBasename setvar="parentCategory" />
  {
    "parentCategoryName": "<mt:CategoryLabel encode_js="1" />",
    "parentCategoryLink": "XXXXX<mt:Var name="parentCategory" />",
    "parentCategoryId": <mt:CategoryID />,
    "subCategories": [
      <mt:SubCategories>{
        "subCategoryName": "<mt:CategoryLabel encode_js="1" />",
        "subCategoryLink": "XXXXX<mt:Var name="parentCategory" />#<mt:CategoryBasename />",
        "subCategoryId": <mt:CategoryID />
      }<mt:SubCatIsLast><mt:Else>,</mt:SubCatIsLast></mt:SubCategories>
    ]
  }<mt:SubCatIsLast><mt:Else>,</mt:SubCatIsLast>
</mt:TopLevelCategories>
]

出力結果は以下のようになりました。

users.json
[
  {
    "parentCategoryName": "XXXXX",
    "parentCategoryLink": "XXXXXX",
    "parentCategoryId": 0,
    "subCategories": [
      {
        "subCategoryName": "XXXXX",
        "subCategoryLink": "XXXXXX",
        "subCategoryId": 0
      },
      {
        "subCategoryName": "XXXXX",
        "subCategoryLink": "XXXXXX",
        "subCategoryId": 0
      }
    ]
  }
]