jsonmovabletype

Movable Type: Converting to json file


I am trying to convert some data to json format using Movable Types template tags and so far I have below code. This code is coming up with blank results. I am not very knowledgeable with this template code so any help would be appreciated.

<mt:SetVar name="entries" function="undef">
<mt:Tags>
    <$mt:TagName trim_to="1" upper_case="1" setvar="current_index"$>

    <mt:SetVar name="e" function="undef">
    <mt:SetHashVar name="e">
        <mt:if name="current_index" ne="$last_index"><mt:getvar name="current_index"></mt:if>
        <mt:TagName setvar="name">
        <mt:setvarblock name="url">https://www.foo.com/tags/<$mt:TagName encode_url="1"$></mt:setvarblock>
    </mt:SetHashVar>
    <$mt:var name="current_index" setvar="last_index"$>
    <mt:SetVar name="entries" key="$last_index" value="$e">
</mt:Tags>
<mt:Var name="entries" to_json="1">

Here is what I am expecting

{
  "A": [
    {
      "name": "Abrand",
      "url": "#"
    },
    {
      "name": "Abrand",
      "url": "#"
    },
    {
      "name": "Abrand",
      "url": "#"
    }
  ],
  "B": [
    {
      "name": "Bbrand",
      "url": "#"
    },
    {
      "name": "Bbrand",
      "url": "#"
    }
  ],
  "C": [
    {
      "name": "Cbrand",
      "url": "#"
    {
      "name": "Cbrand",
      "url": "#"
    },
    {
      "name": "Cbrand",
      "url": "#"
    }
  ]
}

Solution

  • Try this:

    <mt:Tags sort_by="name" sort_order="ascend" limit="1">
        <$mt:TagName trim_to="1" upper_case="1" setvar="current_index"$>
        <$mt:SetVar name="last_index" value="$current_index"$>
    </mt:Tags>
    
    <mt:Tags sort_by="name" sort_order="ascend">
        <$mt:TagName trim_to="1" upper_case="1" setvar="current_index"$>
        <mt:SetHashVar name="e">
            <mt:TagName setvar="name">
            <mt:SetVarBlock name="url">https://www.foo.com/tags/<$mt:TagName encode_url="1"$></mt:SetVarBlock>
        </mt:SetHashVar>
    
        <mt:if name="current_index" eq="$last_index">
            <$mt:SetVar name="hold" function="push" value="$e"$>
        <mt:else>
            <$mt:Var name="entries{$last_index}" value="$hold"$>
            <$mt:SetVar name="last_index" value="$current_index"$>
            <$mt:SetVar name="hold" value=""$>
            <$mt:SetVar name="hold" function="push" value="$e"$>
        </mt:if>
    </mt:Tags>
    
    <mt:Var name="entries" to_json="1">
    

    (I tested it on MT 6.2.2, but should work on 5.x)