JSON の一部の key value を削除する ( Jackson JsonNode )

巨大なJSON、階層が深かったり値の文字列がとても長かったりする時は、整形したとしても とても見にくく目視確認に困る。 確認しなくても済むものは、取り除いてしまいたい。 以下、そんなに大きくないJSON でそういう場合の方法、Jacksonライブラリの JsonN…

PostgreSQL mybatis JSONB型があるテーブルへの insert

例)jbooks というテーブルの列名=jdata が JSONB型だとする。ObjectMapper の writeValueAsString に頼る方法 SQLMap XML で bindタグで、writeValueAsString が働くようにする。 <insert id="insertJbook"> <bind name="jdata" value="objectMapper.writeValueAsString(object)" /> INSERT INTO jbooks (id, title, jdata) VALUES(#{id}, #{title}, '${jda</bind></insert>…

PostgreSQL JSONB 抽出時に出力したくないキー、値を指定する

SQL

例) 列名 jdata というJSONB列に以下の json データが入っているとする。 { "fr": 11, "key": "E", "pub": "ara", "item": { "name": "orange", "group": { "x01": "AX193", "x02": "AX248", "c923": "A_982" }, "price": 231, "oprion": " " }, "point": 1…

コンテナにファイルをコピー/ダウンロード

OpenShift のコマンドのメモ oc rsync <source> <destination> [-c <container>]/home/user/source をコンテナ内 /src にコピー $ oc rsync /home/user/source devpod1234:/srcこれの逆 $ oc rsync devpod1234:/src /home/user/source</container></destination></source>

2つのログファイルをマージする

2つのログファイルをマージするツールを Python で作りました。 【作った理由】 ・Windows にダウンロードしたりしたログファイルを簡単にドラッグアンドドロップの操作で ログ出力のログのタイムラインに沿ってマージしたい。 → パラメータで2個のログフ…

JSONB のキーと他のキーの複合キー(by PostgreSQL)

SQL

先日書いた JSONB の primary key を作る ( by PosetgreSQL ) - Oboe吹きプログラマの黙示録 これでは、目的の主キーとして、任意の列とJSONB型のJSON内の値のキーとする場合の CONSTRAINT を2つ書けない制約でUPSERT文 (ON CONFLICT~DO UPDATE)を思うよ…

JSONB の primary key を作る ( by PosetgreSQL )

SQL

単純に CREATE TABLE の PRIMARY KEY で指定してもエラーになる。 CREATE TABLE public.jsample ( id int4 NOT NULL, title varchar(60) NOT NULL, jdoc jsonb not NULL, PRIMARY KEY (id, jdoc->'item'->>'id') ); SQLエラー [42601]: ERROR: "->"またはそ…

json_set/jsonb_set で NULL をセットする時の注意

SQL

PostgreSQL でのことである。 あるテーブルの JSONB型に、以下のようなJSON値があるとする。 { "a":{ "a1": "Apple", "a2": "Lemon" } } このJSONの"a1" を null にする場合、シングルクォートで括った 文字列 ' null' 指定した以下なら成功する。 UPDATE jb…

PostgreSQL JSON演算子による JSON null の扱い

SQL

JSON型、JSONB型、の JSON の null の扱い まずは JSON演算子の基本から、 "b" 配列の1番目 SELECT '{"a":{"b":[{"c":1},{"c":2},{"c":null}]}}'::jsonb->'a'->'b'->1->>'c' 結果は 文字型で 2 "b" 配列の2番目 SELECT '{"a":{"b":[{"c":1},{"c":2},{"c":n…

Json が同じかどうか判定する

2つのJsonの キーと値が同じであるか判定する。 Java なら、 Jackson ライブラリの JsonNode に変換して、equals メソッドで判定する。 ==演算子ではダメ!Python なら、 dict に変換して、==演算子で判定して良い。 import json dictA = json.loads('{…

JSON から PostgreSQL JSON演算子のパスを作る

JSONの解析として、過去、いろいろと作ってきた。 Jackson でJSON読込み key-value の BiConsumer を処理する - Oboe吹きプログラマの黙示録 Jackson でJSON読込み key-value の BiConsumer で、日付時刻も - Oboe吹きプログラマの黙示録 Jackson JSON読込み…

区切り、括りの正規表現

区切り文字や括りの1行文字列で、最初 or 最後の一致を求める正規表現 例題) 対象文字列 'AsDate'->'C'->'2'->'June'区切り文字「->」 最後の区切り文字以降 (?<=\->)([^\->]+$) ## match した文字列 'June' 最後の区切りを含んだ文字以降 \->(?<=\->)([^\…

重複させないリストのマージ(結合)

題目:2つのリスト、alist と blist alist に存在しない blist と合わせて結果 alist にする。(マージする) 結果はソートする。 結果は alist にする。 alist = [ 'a', 'c', 'b' ] blist = [ 'c', 'd', 'e', 'a' ] 単純にすぐに書いてしまう原始的なコー…

pytest Thread宣言のクラスをモックにする

対象クラス abusiness.py from threading import Thread class AThread(Thread): def run(self)->None: print("AThread!") # TODO 処理 AThread を実行するテストされるクラス some.py class Some: def exec(self)->None: a = AThread() a.start() a.join() …

PostgreSQL 更新のRETURNING 結果に対して GROUP BY を実行する

SQL

UPDATE tablename SET column = value WHERE ~ RETURNING ~ に続けて GROUP BY を書いて利かせたいと思ってそのまま書いてはダメである。WITH 句を使う。例) WITH sampleupdate AS ( UPDATE samples SET delete_flg = true WHERE delete_flg = false RETURN…

Python での日本の祝日計算

昨日、Java の祝日計算プログラムが配布先を移動したりメンテナンスしたので、 ついでに Python 版もこれと一緒に公開することにしました。 Python での日本の祝日を抽出するものは、いろんなものが既に出回っているようですが、 計算で求めるようなものは少…

ネストしたリストの展開

入れ子状態のリストを1次元のリストに作りなおす。 例) list = [['A', 'B'], [], ['C', 'D'], ['E']] これを、['A', 'B', 'C', 'D', 'E'] にする list = [v for list_nest in list for v in list_nest] # ['A', 'B', 'C', 'D', 'E'] 辞書のリスト→1つの辞…

Java祝日計算の配布先を移動

中国に買収されてしまったOSDN(Open Source Development Network) もはや、ここで Java祝日計算プログラムを公開する価値はなく、、 (というか、まともに繋がらなくなっているし、ダウンロードもできない) ようやく GitHubで公開することにした。https:/…

SQLMapper interface を追加する

プログラムの管理の側面から、mybatis の SQLMapper をプログラムの動作中に追加することは 禁止されるべきであろう。 でも、SQLMap の XML を用意せずに Mappper インターフェースを追加することは可能なのです。SqlSession session という生成済みの SqlSe…

Jacksonを使う代わりに PostgreSQL の JSON関数を使う

Java で JSON を編集するときによく使われるのが Jackson ライブラリであろう。 巨大で階層が深い中の値を変更するのは、Jackson の JsonNode としてJSONを読み込んで、コードを書くのも 面倒くさいばかりでなく、あまり汎用的なものは期待できない。 Postgr…

Python の日付時刻出力のメモ

日付時刻出力のメモを、あえて自分でメモしたくなった。何も考えないで。。 import datetime import re ndt = datetime.datetime.now() print(type(ndt)) # <class 'datetime.datetime'> print(ndt) # 2023-11-22 20:22:21.038937 strftime を使う。 ndt = datetime.datetime.now() prin</class>…

PostgreSQL JSON型、JSONB型の整形出力

SQL

JSON型json_pretty( column ) JSONB型jsonb_pretty( column )JSONB型の方が使う機会が多そう。 SELECT jsonb_pretty('{"f1":1,"f2":null, "f3":[1,2,3]}') { "f1": 1, "f2": null, "f3": [ 1, 2, 3 ] }

POstgreSQL ネストしたキーの値の更新

SQL

先日書いた PostgreSQL JSON の部分的更新 - Oboe吹きプログラマの黙示録 この方法では、ネストしたキーを指定して一部を更新することができない。 例) { "task": { "name": "A", "order" : 10, "limit" : "2023-12-09" } }このようなJSONに対して、'task'-…

PostgreSQL JSON の部分的更新

SQL

JSON型データの一部の key value を更新する。サンプルデータ、JSON列が、次のデータである時、 {"key": "E", "name": "orange", "ppp": "pst" } 追加や更新 || で、マージする。 UPDATE jbooks SET jdata = jdata::jsonb || json_build_object( 'key', 'D',…

再考、Python のロギング

標準出力だけにログ出力することにして、もっとシンプルに書く。 ログフォーマットの種類の一覧のドキュメントが見つけにくいので、 ここに、リンクを→ https://docs.python.org/ja/3/library/logging.html以下、過去に書いたのは、浅はかだった。 Python ロ…

mock-Alchemy、pytest-sqlalchemy-mock を使わないでモックを作る(2)

mock-Alchemy、pytest-sqlalchemy-mock を使わないでモックを作る - Oboe吹きプログラマの黙示録 の第2弾です。 mock-alchemy や、pytest-sqlalchemy-mock を使わない。 もう少し複雑なパターンです。 SQL直接実行で、パラメータを複数指定するパターンです…

PythonにおけるJSON読込み時の日付時刻文字列を datetime に

Java だったら、Jackson 使用で、jackson-datatype-jsr310 ライブラリを使った デシリアライズを設定するだろう。 Jackson の 日付時刻の読込み - Oboe吹きプログラマの黙示録 jackson-datatype-jsr310 を使う - Oboe吹きプログラマの黙示録 Python の json.…

PyChram の pytest 設定

PyCharm の設定画面を開いて テストスクリプトを書いたら、実行設定は、 もちろん、pytest と pytest-mock がインストール済であることが前提

mock-Alchemy、pytest-sqlalchemy-mock を使わないでモックを作る

pytest-mock だけで頑張る方法今回目的の対象の検索クエリ'name'列を指定してSQLの結果から1行目の結果の 'color'列の値を取得するクエリ のメソッドがある。 class Sample: def queryColor(self, name:str)->str: sfactory = sessionmaker(autocommit=Fals…

PostgreSQL JSON 型の演算子

SQL

マニュアル参照:9.15. JSON関数と演算子JSON の値、数値として SELECT されるか? '{ "a": [1,2,3] }'::json->'a'->1 この場合、2 が数値として取り出せるか?というとそうではないらしい-> この演算子のまま、 以下のように CAST してはダメだ。 CAST('{ "…