代码之家  ›  专栏  ›  技术社区  ›  NeoVe

按字母顺序加载json文件-django

  •  0
  • NeoVe  · 技术社区  · 7 年前

    使用此方法:

    def postcodes(request):
        with open('core/stores.json') as f:
            data = json.load(f)
            return JsonResponse(data, safe=False)
    

    我将本地JSON文件加载到此URL中:

    urlpatterns = [
        path('stores/', views.postcodes, name='postcodes'),
    ]
    

    它完美地呈现,现在,我的JSON文件看起来如下:

    [
    {
        "name": "St_Albans",
        "postcode": "AL1 2RJ"
    },
    {
        "name": "Hatfield",
        "postcode": "AL9 5JP"
    },
    {
        "name": "Worthing",
        "postcode": "BN14 9GB"
    },
    

    等等…

    如你所见,如果你考虑到邮政编码,这是按字母顺序排列的。

    我需要的是阅读这个文件,并按字母顺序呈现它,但不是按原来的顺序(按 postcode )但是 name .

    我认为我不能为此使用内置的django循环或标记,因为它们主要用于模型或存储数据。

    但我不完全确定。

    什么方法可以更快地实现这一点,而不是将所有内容保存到数据库中?

    我查了一下 serializers 但那是为了 django-rest-framework 我在使用平原 requests 在这里。

    有什么想法吗?

    我现在没有使用任何模板,它只是在浏览器上按原样呈现。

    1 回复  |  直到 7 年前
        1
  •  2
  •   willeM_ Van Onsem    7 年前

    你可以用 .sort(..) 以下内容:

    import json
    from operator import itemgetter
    
    def postcodes(request):
        with open('core/stores.json') as f:
            data = json.load(f)
        data.sort(key=itemgetter('name'))
        return JsonResponse(data, safe=False)

    然后将内容呈现为:

    [
        {"name": "Hatfield", "postcode": "AL9 5JP"},
        {"name": "St_Albans", "postcode": "AL1 2RJ"},
        {"name": "Worthing", "postcode": "BN14 9GB"}
    ]
    

    注意,如果你想取邮政编码 总是 按照字母顺序,最好简单地对 stores.json 文件,已经按照这个顺序。