Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JJUG CCC 懇親会LT用資料
Search
pawn-4-git
May 18, 2019
Programming
0
93
JJUG CCC 懇親会LT用資料
pawn-4-git
May 18, 2019
Tweet
Share
More Decks by pawn-4-git
See All by pawn-4-git
JJUG CCC 2018 fall LT
pawn4sd
0
68
Other Decks in Programming
See All in Programming
Ruby on Fails - effective error handling with Rails conventions
talyssonoc
0
140
Scalable Customer Journey Orchestration (CJO)
lewuathe
0
440
Git Rebase
bkuhlmann
11
1.6k
Netty Chicago Java User Group 2024-04-17
sullis
0
210
DMMプラットフォームがTiDB Cloudを採用した背景
pospome
9
4.3k
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
7
990
Behind VS Code Extensions for JavaScript / TypeScript Linnting and Formatting
unvalley
6
1.3k
Git Lint
bkuhlmann
4
760
デフォルトにして至高、RubyMineの大好きな所
ruzia
0
990
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
180
GraphQLサーバの構成要素を整理する #ハッカー鮨 #tsukijigraphql / graphql server technology selection
izumin5210
4
920
Milestoner
bkuhlmann
1
420
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
358
22k
Web Components: a chance to create the future
zenorocha
306
41k
Build your cross-platform service in a week with App Engine
jlugia
226
17k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.7k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.1k
Fashionably flexible responsive web design (full day workshop)
malarkey
398
65k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
14
1.5k
GraphQLとの向き合い方2022年版
quramy
33
12k
The Invisible Customer
myddelton
114
12k
Creatively Recalculating Your Daily Design Routine
revolveconf
211
11k
The Language of Interfaces
destraynor
151
23k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
8
3.4k
Transcript
JSON Map ⇒ 変換の罠 2019.5.18 JJUG CCC LT 蓬莱寿成
自己紹介 • 名前 蓬莱寿成 • 都内の企業で SE をして 8 年目 •
普段は Java を使った Web アプリケーション開発 • Twitter @pawn_4_t • 個人のブログ https://whiletruedotcom.wordpress.com/
自己紹介
自己紹介
自己紹介
本日の内容 • JSON から Map への変換 バージョン Java8 JSONIC のライブラリを使用
問)下のコードの実行結果はどうなるでしょう
問)下のコードの実行結果はどうなるでしょう ClassCastException
問)下のコードの実行結果はどうなるでしょう ClassCastException ClassCastException: java.math.BigDecimal cannot be cast to java.lang.String
問)下のコードの実行結果はどうなるでしょう ClassCastException ClassCastException: • java.math.BigDecimal cannot be cast to java.lang.String
(・・・ BigDecimal ?どこにも使ってないのに?)
解析 • クラスファイルのデコンパイルをしてみる
解析 • クラスファイルのデコンパイルをしてみる ???
解析 • クラスファイルのデコンパイルをしてみる 型の定義がなくなる!!
解析 • クラスファイルのデコンパイルをしてみる Key も Value も型は固定ではない!
解析 • クラスファイルのデコンパイルをしてみる 変換前の文字列の 1234 が”で囲まれてないので数値扱い ⇒Value の型が BigDecimal になる
解析 • クラスファイルのデコンパイルをしてみる BigDecimal の変数を String に変換しようとする ⇒ 例外発生
テストで見つからなかった原因は? API
参考までに • Map<String,Integer> のデコンパイルをしてみる
まとめ • Map の型の定義はコンパイル後は宣言の部分から消える (その後の変数が使用される場所に反映される) • JSON 使いやすいが変換ミスが原因のわかりにくいバグ を生む(そもそも専用の POJO
に変えるべき) • ソース見てもわからなかったらデコンパイルかけてみる