Java

MySQL JSON型をmybatis で読み書きするサンプル

MySQL バージョン 5.7.8 以降で使える JSON型に対する mybatis のハンドラ実装のサンプルです。 JSON型のデータが、単純な key-value だけでなくネストしたオブジェクトが入ったJSONでも、 Java のクラスのネストと対応できることを示すためのサンプルです。…

Jackson LocalTimeDeserializer の注意

Jackson で、JSR-310 対応の LocalTime をデシリアライズする設定で なぜか、次の方法で JavaTimeModule を設定しようすると、 メソッド addDeSerializer(Class, LocalTimeDeserializer) は型 SimpleModule で未定義です とコンパイルエラーになる。 JavaTim…

Java → Python 実行結果の文字コード

以前、Java から Python 実行した時の結果をPython標準出力で Java が受信する方法を投稿したが、 Javaからプロセス起動で実行するPython と文字列の受け渡し - Oboe吹きプログラマの黙示録Python 標準出力→Java受け取り - Oboe吹きプログラマの黙示録 …

Java Unicode文字列を通常の文字列(utf-8)に変換する(他の文字が混合しても変換する)

文字列書式、\uXXXX のままの String インスタンスなら、変換処理の必要性なくそのまま インスタンスを扱うのであるが、文字列として \uXXXX を 通常の文字列(utf-8)に変換する場合の問題です。 文字列書式、\uXXXX String str = "\u6f22\u5b57\uff1a\u6c0…

総称型のクラスを認識する

総称型のインスタンスを与える場合、当たり前だが総称型のクラスは認識できる。 public class Some<T> { private Class<T> genericClass; public Some(T t) { genericClass = t.getClass(); } このようにコンストラクタで T インスタンスを渡すのではなく、渡さず</t></t>…

Bean の lenient なコピー

親クラスを全て参照する方法を応用すれば、 以前書いた、yipuran-core で FieldUtil なるものを作り、 yipuran-core/FieldUtil.java at master · yipuran/yipuran-core · GitHub public static <R, T> R copy(T t, Supplier<R> s) public static <R, T> R copylenient(T t, </r,></r></r,>…

親Class を全て参照する

package sample 配下に public class Foo extends FooBase{ } public class FooBase extends AppBase{ } public class AppBase{ } とあるとき、親Class 全てを求める方法 UnaryOperator<Class<?>> superFind = c->c.getSuperclass(); Class cl = Foo.class; while(!(c</class<?>…

Collector.of のサンプル(2)

フィールド名、及び getter / setter が同じ Java Bean のコピーも、Collector.of のサンプルとして 以下のように書ける。 public static<T,U> U fieldcopy(T t, U u){ UnaryOperator<String> topUpper = s->s.substring(0, 1).toUpperCase() + s.substring(1); return A</string></t,u>…

Collector.of のサンプル(1)

java.util.stream.Collector#of の簡単なサンプルCollectors.toSet() で済む話ではあるのだが、 static <T,A,R> Collector<T,A,R> of(Supplier<A> supplier, BiConsumer<A,T> accumulator, BinaryOperator<A> combiner, Function<A,R> finisher, Collector.Characteristics... characterist</a,r></a></a,t></a></t,a,r></t,a,r>…

Stream の Collector 見直し。。

去年、書いたStream の終端処理 Collector 以下は、 リストから重複要素を抽出する。 - Oboe吹きプログラマの黙示録 並行Stream実行ではNGであるのを反省して、以下のように修正すべきです。 static <T> Collector<T, Map<T, Integer>, List<T>> duplicatedList(){ return Collector</t></t,></t>…

SpringBoot で gson使用

Jackson も、Google gson も spring-boot-starter-json で利用するための構成があります。 SpringBoot で、gson だけに使用を絞りたい時はどうすればいいのでしょう。まずは、Gsonを使うための設定 for Gradle build.gradle dependencies { compile group: '…

Jackson 未定義フィールドのJSON読込み、JSONコメント

JSON にコメントを書く場合、いろいろあって よく紹介されてるのが、、 Hjson ( .hjson ) https://hjson.github.io/JSON5 ( .json5o ) https://json5.org/JSONC ( .jsonc ) https://github.com/microsoft/node-jsonc-parser Visual Studio Code 向け、ですが…

エポックミリ秒または秒数をJSONデシリアライズ

Jackson でJSONで表現されたエポックミリ秒またはエポック秒数を、 デシリアライズするには、次のカスタマイズ デシリアライザを用意して、 jackson-datatype-jsr310 の JavaTimeModule に登録して、 ObjectMapper にセットする。LocalDateTime として読込ま…

JSONとマップする任意クラスを定義しないでJSONの値を変更

Jackson あるいは、Google gson を使用して JSON → JavaクラスObject → 属性値の変更 → JavaクラスObject → JSON という流れを組むのがほとんどの方法であるが、 そうではなく! Jackson でJSONを読み込んだ結果の JsonNode を 変更して、toString() や、Obj…

JWT JSON読込み

JSON Web Tokens - jwt.io のJSON読込みについて、、、 デコードしたJWT の getClaims() が返す Mapが、Claimインスタンスのマップであるが、 この Claimインスタンスは、隠されたクラス com.auth0.jwt.impl.JsonNodeClaim である。 この JsonNodeClaim が値…

Jackson 2.12 から、PropertyNamingStrategy.SNAKE_CASE は、非奨励になってた。

JSON を解析、出力で使うJackson で、JSONのキー、 Property Name を Snake CASE にしたり Camel CASE にしたりする PropertyNamingStrategy.SNAKE_CASE PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES は、バージョン 2.12 から、@Depr…

Map の値にリストなどを持たせる場合の書きやすさと効率

リストなどコレクションを Map にする構造では、キー存在有無によってどうしても 初期リスト、コレクションを格納しなければならない。 Map<String, List<String>> map = new HashMap<>(); if (!map.containsKey("a")) { map.put("a", new ArrayList<String>()); } map.get("a").add("100"</string></string,>…

throwable な Function を使うケース

先日の Jackson 使用する JSON解析の方法では、 oboe2uran.hatenablog.comJSON構造の中階層のキーを任意クラス型に変換させる場合、 ObjectMapper から com.fasterxml.jackson.databind.ObjectReader を取得して、 readValue(JsonNode) メソッドを実行すれば…

Jackson JSON読込み、key-value 解析を柔軟にする

Jackson JSON読込みで、JSON key-value を BiConsumer はまたは、Stream 生成する方法を Jackson でJSON読込み key-value の BiConsumer を処理する - Oboe吹きプログラマの黙示録Jackson でJSON読込み key-value の Stream生成 - Oboe吹きプログラマの黙示…

Jackson でJSON読込み key-value の BiConsumer で、日付時刻も

oboe2uran.hatenablog.comoboe2uran.hatenablog.comを書いたが、日付時刻は、LocalDate LocalDateTime で読み取りたいという要求に応えるために 以下のようにする。 import java.io.IOException; import java.io.InputStream; import java.time.LocalDate; i…

Jackson の 日付時刻の読込み

JSR310 Date And Time API に従ったJacksonは、 jackson-datatype-jsr310 を使用する。 Maven 利用なら、pom.xml は、全部で <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> </dependency>

クラスと同じclasspath の場所に置いたファイルのIO(2)

先日書いた、 クラスと同じclasspath の場所に置いたファイルのIO - Oboe吹きプログラマの黙示録よくよく考えたら public File getCurrentPathFile(String path) throws IOException{ try{ return Optional.ofNullable( ClassLoader.getSystemClassLoader().…

Predicate 結果で Function 実行する

任意の検査をして Function<T, R> を実行する。 これは、stream か、Optional で filter 実行後に map あるいは flatMap を実行と ラムダ式を連結して記述すれば済むことではある。例)日付文字列→LocalDate String str; // TODO 日付文字列をstr に格納 LocalDate</t,>…

クラスと同じclasspath の場所に置いたファイルのIO

resources ではなく、Javaソースと同じ場所にファイルを置いて ビルド後の classes の同じパッケージ階層に配置されたファイルを読み込む方法、java 拡張子以外のファイルもビルドで、class と共に同じ場所に配置されるころが前提条件であるが、以下のように…

gson でJSON読み込んで、Key と Value

先日、Jackson でJSON読込み key-value の BiConsumer を処理する - Oboe吹きプログラマの黙示録Jackson でJSON読込み key-value の Stream生成 - Oboe吹きプログラマの黙示録 を書いたので、gson で同じことをします。JSONキーは、"." で区切り、配列は、[n…

Jackson でJSON読込み key-value の Stream生成

先日の oboe2uran.hatenablog.comさらに、以下のメソッドも追加すると便利かもしれない。 public Stream<Entry<String, Object>> stream(String jsontxt){ Stream.Builder<Entry<String, Object>> builder = Stream.builder(); ObjectMapper mapper = new ObjectMapper(); try{ parseJson(mapper.readTree</entry<string,></entry<string,>…

Jackson でJSON読込み key-value の BiConsumer を処理する

JSON を Jackson の ObjectMapper でクラスにマッピングするのではなく、 JSON キー と 値の BiConsumer を実行する。ObjectMapper の readTree メソッドで取得する JsonNode を使用する。 import java.io.IOException; import java.io.InputStream; import …

gson や Jackson に頼らない JSON の読込み

非奨励の nashorn 使用する方法でなく、別の方法です。 有名な Graal VM の助けを借りる方法です。 https://www.graalvm.org/ 準備: Maven pom.xml <dependency> <groupId>org.graalvm.js</groupId> <artifactId>js</artifactId> <version>21.0.0.2</version> </dependency> <dependency> <groupId>org.graalvm.js</groupId> <artifactId>js-scriptengine</artifactid></dependency>

gson や Jackson に頼らない JSON の読込み(非奨励の方法)

標準ライブラリにある javax.script.ScriptEngine で、 JavaScript として解釈させて Nashorn で参照する方法です。 Google gson みたいな高機能は期待できません。 Nashorn は、Java11 から非奨励です。 Java15 から廃止されてます 書いては、みたものの、…

Jackson でJSON読込み時、フィールド存在しない場合

Jackson で ObjectMapper による JSON 読込で、JSONキーに対してクラス側にフィールドが存在しないと UnrecognizedPropertyException を発生するわけだが、それを無視して読込みさせたい時は、 @JsonIgnoreProperties クラスアノテーションで、ignoreUnknown…