【问题标题】:Sorting JSON data by date in HUGO在 HUGO 中按日期对 JSON 数据进行排序
【发布时间】:2021-11-04 00:59:04
【问题描述】:

我有以下数据结构在 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 的顺序正确,但这对我来说似乎很脆弱。

【问题讨论】:

    标签: hugo


    【解决方案1】:

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

    1. https://gohugo.io/functions/range/#readout
    2. https://gohugo.io/functions/sort/#readout

    所以,类似: 作者:{{ range sort .Site.Params.authors }}{{ .firstName }} {{ end }}
    (上面链接 2 中给出的示例)。

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

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

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

    【讨论】:

      【解决方案2】:

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

          {{ $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>
      

      如果有人有更清洁的方法,那么我会全力以赴!

      【讨论】:

        【解决方案3】:

        假设你的 json 是“events.json”,然后去下面的代码:

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

        上述解决方案正在运行检查我的branch repo

        【讨论】:

        • 是的,这不起作用——这是我已经尝试过的方法之一。
        • @LaylaCodesIt 它对我有用很奇怪......你有回购吗?
        猜你喜欢
        • 2016-07-26
        • 2020-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-12
        • 1970-01-01
        相关资源
        最近更新 更多