在 HUGO 中按日期对 JSON 数据进行排序

Sorting JSON data by date in HUGO

我在 HUGO 站点中使用以下数据结构 本地 appearances.json 文件中的数据:

{
    "events":[ {
        "name": "title three",
        "date": "7/02/2022",
        "url": "http://some.com"
    },
    {
       "name": "title one",
       "date": "5/01/2022",
       "url": "http://some.com"
   },
    {
        "name": "title two",
        "date": "7/01/2022",
        "url": "http://some.com"
    }]

}

部分页面:

 <div class="row listrecent">           
    {{ range  .Site.Data.appearances.events }}
          {{- partial "list-partials/appearancebox.html" . -}} 
     {{end}}  
</div>

输出:

但是,我想按“日期”对数组的内容进行排序,最好将最新事件放在顶部 - 即可见的第一个块应该是“标题三”

我尝试了各种排序方法并取得了一些成功,但我似乎无法将按日期排序和转换字符串化日期结合起来。

我可以确保 JSON 的顺序正确,但这对我来说似乎很脆弱。

我不在我的开发设置附近,所以这将是伪代码和概念,但是:

  1. https://gohugo.io/functions/range/#readout <- 不是很详细。
  2. https://gohugo.io/functions/sort/#readout <- 更多数据。

所以,像这样: 作者:{{ range sort .Site.Params.authors }}{{ .firstName }} {{ end }}
(上面 link 2 中给出的示例)。

所以concept/psuedo,我相信: {{ 范围排序 .Site.Data.etc.etc. “日期”}}

这将按升序排序(同样,不确定日期字段的最终输出,也是因为我相信您将日期作为字符串,据我所知,它是 json,但意思是,它不会给你预期的输出。所以你可能必须将该字段转换为日期对象或数据可排序概念,而不是字符串。
https://gohugo.io/functions/format/#use-local-and-utc
可能对此有所帮助。

同样,不在我的 compu/dev 设置附近,但以上应该有效。关键是排序命令。

假设您的 json 是“events.json”,然后使用以下代码:

<ul>
{{ range sort $json.events "date" "desc" }}
    <li>
        <b>
            {{ .name }}
        </b>
        <br>            
        {{ .date }}
    </li>
{{ end }}
</ul>

以上解决方案有效检查我的 branch repo

最后的解决方案是这样的:

    {{ $events := slice }}
    {{ range .Site.Data.appearances.events }}
    {{ $event := . }}
    {{ $parsedEvent := dict }}
    {{ range $k, $v := $event }}
    {{ if eq $k "date" }}
    {{ $parsedEvent = merge $parsedEvent (dict $k (time $v)) }}
    {{ else }}
    {{ $parsedEvent = merge $parsedEvent (dict $k $v) }}
    {{ end }}
    {{ end }}
    {{ $events = $events | append $parsedEvent }}
    {{ end }}
    <div class="row listrecent">
    {{ range sort $events "date" "desc" }}

   
        {{ if (.date.After now) }}
        {{- partial "list-partials/appearancebox.html" . -}}

        {{ end }}
    {{end}}
</div>

如果有人有更清洁的方法,那么我洗耳恭听!