JSON のソート

Python での JSON のソートサンプル

data.json

{
  "title": "サンプル",
  "records":
   [
     {"item": "item 1", "point": 4.63 , "date":"2020-02-02" , "memo":"" },
     {"item": "item 2", "point": 74.68, "date":"2020-02-01" , "memo":"" },
     {"item": "item 3", "point": 9.38,  "date":"2020-02-05" , "memo":null },
     {"item": "item 4", "point": 5.78,  "date":"2020-02-14" , "memo":"" },
     {"item": "item 5", "point": 5.53,  "date":"2020-02-07" , "memo":"" }
   ]
}

sorted を使用してソートする。

# -*- coding: UTF-8 -*-
import json

with open('data.json', 'r', encoding='utf-8') as f:
    # JSONファイル→辞書
    data = json.load(f)
    data['records'] = sorted(data['records'], key=lambda k: k['point'], reverse=True)
    str = json.dumps(data, indent=4, skipkeys=True, ensure_ascii=False)
    print(str)

日付の昇順ソート

    data['records'] = sorted(data['records'], key=lambda k: k['date'], reverse=False)

memo のソート、
null がある場合、そのままではソートできないので、'' 空文字でソートさせる必要がある。

    data['records'] = sorted(data['records'], key=lambda k:  '' if k['memo']==None else k['memo'], reverse=False)

↑ memo のソートの結果は、以下のようになる。

{
    "title": "サンプル",
    "records": [
        {
            "item": "item 3",
            "point": 9.38,
            "date": "2020-02-05",
            "memo": null
        },
        {
            "item": "item 1",
            "point": 4.63,
            "date": "2020-02-02",
            "memo": ""
        },
        {
            "item": "item 4",
            "point": 5.78,
            "date": "2020-02-14",
            "memo": ""
        },
        {
            "item": "item 2",
            "point": 74.68,
            "date": "2020-02-01",
            "memo": ""
        },
        {
            "item": "item 5",
            "point": 5.53,
            "date": "2020-02-07",
            "memo": ""
        }
    ]
}