B-Teck!

お仕事からゲームまで幅広く

【Kotlin】Kotlin+JacksonでJSONをparseする

準備

ビルドツールの設定に jackson-module-kotlin を追加する。
バージョンは任意で。

  • maven
    <dependencies>
        <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-module-kotlin</artifactId>
            <version>2.9.7</version>
        </dependency>
    </dependencies>
  • gradle
compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-kotlin', version: '2.9.7'

手順

JSONを用意する

{
    "name" : "beatdjam",
    "age" : "28",
    "url" : "http://beatdjam.hatenablog.com/"
}

JSONのプロパティに対応するdata classを作る

data class Person(
    val name : String,
    val age : String,
    val url : String
)

JSONをdata classへparseするメソッドを作る

inline fun <reified T : Any> parseJSON(json : String) : T {
    return jacksonObjectMapper().readValue(json, T::class.java)
}

data classを型パラメータに指定して3のメソッドを呼び出す

val result = parseJSON<Person>(json)
// または
val result2 : Person = parseJSON(json)

ソース全文

import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper

fun main(args: Array<String>) {
    val json = """
        {
            "name" : "beatdjam",
            "age" : "28",
            "url" : "http://beatdjam.hatenablog.com/"
        }
    """

    val result = parseJSON<Person>(json)
    println(result.name)
    println(result.age)
    println(result.url)
}

inline fun <reified T : Any> parseJSON(json : String) : T {
    return jacksonObjectMapper().readValue(json, T::class.java)
}

data class Person(
    val name : String,
    val age : String,
    val url : String
)

【雑記】今年の目標

1月もほぼ終わりになってしまいましたが、今年の目標をたてました。
明確な数字がないものも多いですが、なるべく達成したいですね。

ブログ

  • 内容・ジャンルにかかわらずブログちゃんとかく
    • 最低月1以上
    • 年40本以上
    • PV 15000/month

競技プログラミング

  • 緑コーダーになる
  • 月1回はRatedなContestに参加
  • 頑張って社内の競プロ部に参加する時間を作る

スキルアップ

  • 個人でアプリリリースしたい
    • 5月くらいまでにアプリ一通り勉強して設計して夏頃までにはリリースしたい
  • ServerSideKotlinの啓蒙を進める
    • ブログ・社内LTなど
    • Jersey + Kotlinの導入記事を連載形式で書けたらと思ってます
  • 社内外の人脈を広める
    • 勉強会
    • ご飯
    • (できたら社外LTとか…?)
  • セルフブランディングの強化
    • 対外的に出せる職務経歴の用意
    • ポートフォリオになるものを作る
      • サーバーサイド
      • フロント
      • アプリ

今年もまた一年、よろしくおねがいします。

【雑記】2018年お疲れ様でした

今年も一年お疲れ様でした。
去年もやっていたので今年も振り返りを書こうと思います。

beatdjam.hatenablog.com

結婚生活

結婚してそろそろ一年半が経過しました。
お互いぶつかったり喧嘩したりしながらも、なんだかんだで仲良く、楽しくやっています。
結婚一年の記念日に結婚式も行うことができ、お祝いいただいた方には感謝の気持ちでいっぱいです。

仕事

ちょうど今年の1月から新しい職場で働き始めたのもあり、激動の一年といった感じでした。
レガシーシステムのお守りから、突然今風の開発に飛び込んだのでキャッチアップが大変で…。
プライベートで勉強していてよかったなと思わされることが多々でした。
また、基本的に常に多言語を扱うWeb・アプリを取り扱うことがほとんどだったので、
そういったケースでどのような懸念があるかも学べたと思います。
下記一年でやったこと一覧。

1〜2月

とあるサイトの春季特集をほぼ一人でPC・スマホ向けに作成。
一般のWebサイト向けデザインや、ユーザー体験を意識することがあまりなかったので、
かなりのカルチャーショックがありました。
npmやJava8など、知識のアップデートが必要な部分も多かったり、
デザイナーと協働で画面を作っていったり、業務で初めてGitを使ったり。
そもそも社内の開発ルールやノウハウがない状態だったので、かなり勉強になった期間でした。

3月

政府系のWordPressサイトのPHP5->7化、プラグイン導入による多言語化を行いました。
前職でのPHPの経験があるというところからPHPのアップデートはあまり困らなかったのですが、
多言語の入稿まで行っていたので単純にマンパワーが必要だったので大変でした…。

4〜8月

世界展開をしているスマホアプリのサーバーサイドを単独で担当することになりました。
スマホアプリへ提供するAPIの開発は初めてで、どういうレスポンスがうれしいのか、
どういうIFなら使いやすいのか、速度と品質の両立など…を考えさせられる難しい期間でした。
この期間で実験的にServer Side Kotlinや、プロジェクトへのユニットテスト導入などを行い、
新しい知識・技術への挑戦をしていく余裕が生まれてきました。

9〜12月

インバウンド向けアプリのサーバーサイドのフルリニューアルをメインエンジニアとして進めています。
4〜8月の期間で得た知見やノウハウを総動員したプロジェクトとして進められているので、
技術的な満足感は非常に高いです。
今年学んだことの集大成として、十分な成果を出せているように感じます。
反面、仕事でやることがギュギュッと詰まった期間で、プライベートの時間は少なかったです。
この辺は妻のためにも来年改善したいですね。

ブログ

Googleのアルゴリズムアップデートなどの影響もあり、
概ね月間1万前後のPV、一番多いときで13000PVまで行くことができました。
前年の同日比は概ね128000PVほどで、月間平均にして10700くらいと言ったところです。
これからもたくさんの人に見てもらえるように、しっかりと記事を書き続けていきたいとおもいます。 f:id:beatdjam:20181231132913j:plain

それではみなさん、来年もよろしくお願いいたします!良いお年を!