Java

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

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

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読込み…

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…

UUID のタイプハンドラ

UUID型のタイプハンドラの必要性をあまり感じなかったので、今まで書いてなかった。 PostgreSQL なら、gen_random_uuid() 関数で生成してくれるし SELECT クエリ結果も、mybatis は、String に自動マッピングで抽出できるとなると、 あまり、java.util.UUID …

Apache POI で、Excelセルの背景色を読み取る

POI で、Excelセルの背景色を設定するのは、 org.apache.poi.ss.usermodel.Workbook から、org.apache.poi.ss.usermodel.CellStyle の インスタンスを生成して、 → Workbook の createCellStyle() メソッド org.apache.poi.ss.usermodel.IndexedColors で表…

snakeyaml

<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>2.2</version> </dependency> https://bitbucket.org/snakeyaml/snakeyaml/src/master/Feature → https://github.com/snakeyaml/snakeyamlfor Pythonhttps://pyyaml.org/https://pypi.org/project/PyYAML/pip install pyyaml

重複などのチェック

Java で試したもの。 oboe2uran.hatenablog.comoboe2uran.hatenablog.comoboe2uran.hatenablog.comPython で試したもの。 oboe2uran.hatenablog.com

Java 数値の3桁区切りフォーマット

int n = 12423 から、右詰めで、3桁区切りの長さ12の文字列を求める時、 [ 12,423]面倒くさい古い方法、NumberFormat デフォルトを使う方法 NumberFormat nf = NumberFormat.getInstance(); String s = String.format("[%12s]", nf.format(n)); 同じよう…

Eclipse デバッガでの値の変更

ブレ―ポイントで単純に変数の値をダイアログでセットすれば良いだけであるけど、 List や Map などの中身を変えたい場合は、どうするか?実行式と変更後のオブジェクトを return 文で戻せばよい。

Java12 からの String の transform

Java12 からの String の transform(Function function) は、 BigDecimal が String を直接解析して BigDecimal を求める static メソッドを持っていない不便さを 解消してくれる。 String str = "1230000000.0012"; BigDecimal value = str.transform(s->Bi…

String の isBlank() と isEmpty()

半角や全角スペースのみの文字列に対して isBlank() true isEmpty() false Apach commons lang3 StringUtils.isBlank(Strring) を使いたくなくて null を考慮するなら、 boolean b = str==null ? true : str.isBlank(); あるいは、 boolean b = Optional.ofN…

アノテーションで指定するnullオブジェクトのJSONシリアライズ

以前紹介した、Jackson シリアライズで、null オブジェクトを出力させない - Oboe吹きプログラマの黙示録 は、ObjectMapper で一律に指定する方法だが個別に指定する方法として対象クラス定義に アノテーションで指定する方法がある。 com.fasterxml.jackson…

Java11 Httpclient のレスポンスをJSONとして受け取るケース

Java11 Httpclient のレスポンスをJSONとして受け取るケースを工夫してみる。 HttpResponse<String> で String 取得してからJSON にする方法 String url; // TODO URL string HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(url)) .GET() .build()</string>…

Jackson の PrettyPrinter

Jackson による整形したJSONのテキスト出力は、これという1つが決めることができない。 例) {"A":"Blue","B":[10,12,14],"C":[{"length":[100,120,140]},{"length":[100,120,140]}]} DefaultPrettyPrinter の indentObjectsWith と indentArraysWith を指…

JSON の部分的な抽出

JSONのパス区切り文字を "." ピリオド、配列を [0], [1] ~の書式で 指定していJSONの該当パス部分のみを抽出したい。GitHub - yipuran/yipuran-jack: Jackson Java JSON-processorを使用する時の補助を目的したライブラリここで、作った org.yipuran.json.J…

jackson-datatype-jsr310 を使う

<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.15.2</version> </dependency> SimpleModule を使う場合、 import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import com.faster…

メッセージ curly brackets Number

oboe2uran.hatenablog.comメソッド名が良くないので書き直す。 public static String getMessage(String template, Object...obj) { Objects.requireNonNull(template); String s = template; Matcher m = Pattern.compile("\\{\\d+\\}").matcher(template);…

「Listの要素が全て同じ」と「重複の存在チェック」

この2つのチェックは、「Listの要素が全て同じ」=true なら、 「Listの要素が全て同じ」= true でなければならない。 List の要素が全て同じ値かどうか List<T> list; boolean res = list.isEmpty() || list.stream().allMatch(e->Objects.equals(list.get(0)</t>…

List の要素が全て同じ値かどうか

List の要素が全て同じ値かどうかをチェックするのに、Stream の allMatch を使う方法がある。 List<T> list; T は、String など、equalsメソッドがちゃんと実装されてる型 boolean res = list.isEmpty() || list.stream().allMatch(list.get(0)::equals); でも</t>…

toString の代用

つまらない理由でエンティティClass定義やDTOクラス定義で、 lombok の @ToString や @Data を後から付与させてもらえないプロジェクトで ログ出力でそのオブジェクトを出力したくて困る場合がある。 せめて、フィールドが public 宣言か、getterメソッド…

Java Stream のネスト展開を考える。

あるListを Stream で処理する時に要素1つが更に List などを走査時に取得して 全体のList として処理することを考える。 簡単なサンプルとして、String の split でどう書くかを確認しておくのが良いだろう。 List<String> list = List.of("1,2,3", "4,5,6", "7,8,</string>…

JUnit テストケース実行範囲の指定

去年書いた oboe2uran.hatenablog.com この時点では、JUnitテストケースの任意のケースの順番の範囲指定で、 番号が連番での実行だけでしたが、1,3,5,13,17~のように、 任意の順番のみの指定をサポートしていませんでした。任意の順番のみの指定…

log4j2 と logback の設定ファイルメモ

今更、サンプルとしてメモしておきたかったので。。。 log4j2 Maven pom.xml の記述 <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.20.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.20.0</version></dependency>

log4j2 のログファイル出力設定をプログラム処理から参照する。

先日の logbackのログファイル出力設定をプログラム処理から参照する。 - Oboe吹きプログラマの黙示録 と同様に、log4j2 においてログファイル出力設定をプログラム処理から参照する。 ログ設定のサンプル <Configuration status="off"> <Properties> <Property name="format1">[%d{yyyy-MM-dd HH:mm:ss.SSS}],[%-5p],[%c#%M]-</property></properties></configuration>…

logbackのログファイル出力設定をプログラム処理から参照する。

logback-classic-1.4.x.jar から、 ch.qos.logback.classic.LoggerContext を取得して、ch.qos.logback.classic.Logger を求めて、Appender<ILoggingEvent> のイテレータで 設定された各アペンダを参照、RollingFileAppender</iloggingevent>

ログファイルのデフォルトの出力ファイル名を日付が付くファイル名にする。

logback の場合と log4j2 の場合を紹介する。logback の場合 logback.xml の appender の指定で、File で指定するログファイル名を書かないようにする。 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> </rollingpolicy></appender>

logback のログ開始を抑制

logback のログ出力で最初に以下の余計なログが出力される場合の抑制 13:29:48,061 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.4.6 13:29:48,088 |-INFO in ch.qos.logback.classic.LoggerContext[defau…