Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Which way is better to handle JSON with Crystal
Search
Takuya Arita
August 01, 2015
Programming
1.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Which way is better to handle JSON with Crystal
Takuya Arita
August 01, 2015
More Decks by Takuya Arita
See All by Takuya Arita
Hosted Redash の EOL と移行ツール redash-migrate / You should know about Hosted Redash EOL and redash-migrate
ariarijp
0
3.4k
Redash で踏み出す BI 導入はじめの一歩 / DataEngineeringStudy Redash
ariarijp
1
2.8k
Redash のいま / Redash in 2021
ariarijp
2
1.2k
Redash 導入・運用を4年ぐらいやって変わったこと・変わらなかったこと / Changed and unchanged things with Redash and me
ariarijp
0
1.5k
5年前の自分に伝えたい広告 API 周辺の歩き方 / SOT Tech Night vol.1
ariarijp
1
560
使われていない、を知る / How do we know unused things in the real world?
ariarijp
0
490
MULTI_ORG について / What is MULTI_ORG in Redash
ariarijp
1
3.9k
あらためて振り返る Redash の使いどころ / Why I strongly recommend Redash
ariarijp
2
1.3k
PHP Data Structures
ariarijp
1
590
Other Decks in Programming
See All in Programming
dotNET_vulnclicker_intro.pdf
deka_morita
0
150
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
360
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
180
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
190
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
150
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
150
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
280
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
1.1k
ActionController meets Protocol Buffers
sorah
0
680
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
210
golang-bob.pdf
iwatsukayura
0
140
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
1.1k
Featured
See All Featured
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
440
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
540
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
Marketing to machines
jonoalderson
1
5.9k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
590
The Pragmatic Product Professional
lauravandoore
37
7.5k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
450
Automating Front-end Workflow
addyosmani
1370
210k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
330
Chasing Engaging Ingredients in Design
codingconduct
0
370
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
310
Transcript
Which way is better to handle JSON with Crystal @ariarijp
w !BSJBSJKQ 5BLVZB"SJUB w $PDPMBCMF *OD w 4PGUXBSF&OHJOFFS "CPVUNF
Today’s Lightning talk
The idea from ཬ.rb 1st anniversary https://nishinipporirb.doorkeeper.jp/events/25958
None
I talked about my first Crystal program
Parse JSON using Crystal
None
I compared Ruby and Crystal
None
Crystal is awesome. But I don’t like Java like type
casting
Next morning
None
@asterite commented on my repository (Amazingly, @asterite read Japanese!) https://github.com/ariarijp/ninirb-1st-anniversary-lt-crystal/commit/2d0062c4a1dc4cabaeb6884591c1771d768c0ce8
As a result
The legacy way require "http/client" require "json" place = ARGV[0]
url = "http://api.openweathermap.org/data/2.5/weather?q=#{place}" resp = HTTP::Client.get(url) weather = JSON.parse(resp.body) pp (((weather as Hash)["weather"] as Array)[0] as Hash)["main"] puts "-" * 80 pp weather
Crystal way require "http/client" require "json" class WeatherResponse json_mapping({ weather:
Array(Weather), }) class Weather json_mapping({ id: Int32, main: String, description: String, icon: String, }) end end place = ARGV[0] url = "http://api.openweathermap.org/data/2.5/weather?q=#{place}" resp = HTTP::Client.get(url) puts "-" * 80 weather_resp = WeatherResponse.from_json(resp.body) pp weather_resp pp weather_resp.weather[0].main
Use JSON Mapping!
Crystal is Awesome!
end