Python DictからJSON文字列変換 dumps()

Python json.dumps()

PythonDictからJSON文字列に変換するにはjson.dumps()を使います。下記は簡単なコード例です。

dic1 = {"NAME": "Robert"}
dic1["ARRAY"] = [1,2,"A"]
dic1["AGE"] = 50
str1 = json.dumps(dic1)
print(str1)

上のコードは変数(dic1)に入れたデータをJSON文字列に変換しています。

printされた結果は「{“NAME”: “Robert”, “ARRAY”: [1, 2, “A”], “AGE”: 50}」このようにJSON文字列で出力されました。

また、このJSON文字列に 改行やインテントをキレイにつけて出力したい場合は下記のように記述します。

str1 = json.dumps(dic1, indent=2, separators=(',', ':'))
print(str1)

結果は、下記のようにインテントと改行が付きます

{
  "NAME":"Robert",
  "ARRAY":[
    1,
    2,
    "A"
  ],
  "AGE":50
}

Dictの中に、Decimalの値が入っている場合json.dumps()を実行すると 「Object of type Decimal is not JSON serializable」とエラーが出ます。その場合は、default引数を使ってDecimalの場合の処理を記述できます。

下記のコードはdictの変数にDecimalが入っている場合の対処コード例です。

dic1 = {"NAME": "Robert"}
dic1["RATE"] = decimal.Decimal(1.5)
str1 = json.dumps(dic1, indent=2, separators=(',', ':'), default=lambda _ : float(_) if isinstance(_, decimal.Decimal) else TypeError)
print(str1)

実行結果は下記です。

{
  "NAME":"Robert",
  "RATE":1.5
}

C# .NET6 macOS 時間の「分・秒」以降を0にする

C# DateTime Ticks計算

Windows 時代からPCを使っているひとは 流行りのスクリプト言語よりC#で書いたほうが楽もしくは安心だと思います。わたしもmacOSを使うようになって簡単なプログラムならPythonNode.jsで書いていましたが.NET6が安定して動くので最近はC#言語macOSで使うようになりました。

C#のDateTime型で「分・秒・㍉秒」などを0にしたい場合、方法はいろいろあると思いますがわたしの場合下記2つの方法を使っています。

新しくDateTimeを作る

DateTimeのコンストラクタの中に「DateTime(int year, int month, int day, int hour, int minute, int second)」があるのでそれを使います。下のコード例では年月日時以降は0に設定しています。

var d1 = DateTime.Now;
d1 = new DateTime(d1.Year, d1.Month, d1.Day, d1.Hour, 0,0);
Console.WriteLine(d1);

DateTimeのTicksで計算

TimeSpanで、1時間出してその後 Ticksを 剰余演算(%) します。

その後、AddTicksしています。

var ts1 = TimeSpan.FromHours(1);
var d1 = DateTime.Now;
var tt1 = d1.Ticks % ts1.Ticks;
d1 = d1.AddTicks(- tt1);
Console.WriteLine(d1);

Ticksが 637 791 516 000 000 000 計算されました。

内部では GetTickCount64() が使われているのかな?よくわからない

2022 MJELD TECHNOLOGIES. ALL RIGHTS RESERVED