JSONはREST API呼び出し、データ保存、多言語との連携などに数多く使用されている。 一方で、JSONは言語でサポートされる表現が整数と浮動小数点数・文字列・配列・オブジェクト・そしてnull程度しかなく、それ以上に複雑な表現はこれらの基本機能を組み合わせて表現することになる。 機能の組み合わせ方には複数の方法があり、特に複数の型の構造体やクラスが混在する時の表現形式は複数ある。 Rustでは、表現したいデータ型が既知であれば、複数の型のうちどれかであることを表現するために列挙型が使える。 そして、Rustのシリアライザ・デシリアライザのライブラリであるserdeを用いて、列挙型とJSONの相互変換をすることができる。 列挙体の4種の表現 serdeで取り扱える列挙体の表現形式は4種類ある*1。 それぞれexternally tagged、internally tagged、adja
概要 quicktype の Haskell 出力を実装しました。 https://github.com/quicktype/quicktype quicktype の機能と使い方を紹介します。 quicktype とは quicktype は JSON などのデータを入力として、各プログラミング言語から JSON を呼び出すコードとそのデータに対応する強い型付きのモデルを自動的に生成してくれるライブラリです。 ライブラリ本体は TypeScript で書かれています。 データからモデルを正しく生成するのは地味で面倒な単純作業が必要ですが、その手間を大幅に削減してくれます。 入力データ JSON 以外の形式も入力データに使うことができます。 JSON JSON Schema TypeScript GraphQL query 出力言語 Haskell の出力を今回実装しました。それ以外にも以
JsonnetというJSONテンプレート言語を紹介する。 後で見るように、これはJSONを生成するための汎用テンプレートというよりはむしろ、計算や依存関係を含む設定を静的に書き下すために便利なのではないかと考えられる。 実際Jsonnetの仕様はGoogleのBCLに似ている。BCLはGoogleでコンテナクラスタシステムBorgの設定を記述するために使われている言語だ。 JSONテンプレート言語 ある意味でJsonnetは毎度おなじみのやつだ。JavaScriptの文法の不便さに対してalt JSが多数出てきた。CSSにおけるネストの分かりづらさやの記述の重複に対してCSS preprocessorが多数出てきた。それと同じようにして、Webにおける機械可読データのLingua FrancaたるJSONを記述するのが不便なのでJSONテンプレートが出てきた。 Jsonnetはその中の1つ
JSON is everywhere on the Internet. Servers spend a lot of time parsing it. We need a fresh approach. The simdjson library uses commonly available SIMD instructions and microparallel algorithms to parse JSON 4x faster than RapidJSON and 25x faster than JSON for Modern C++. Fast: Over 4x faster than commonly used production-grade JSON parsers. Record Breaking Features: Minify JSON at 6 GB/s, valida
jqはとても便利なコマンドです。 JSONを返すAPIを実装するときや、SaaSのAPIから特定の情報を抜き出してシェル変数に代入するときなど、web開発や運用には欠かせないツールとなっています。 しかし、私にとってjqのクエリを一発で書くのは容易ではなく、思い通りの出力が得られないことがよくありました。 難しいエラーメッセージに悩まされて、jqで書くのを諦めて別の言語で書き直すこともありました。 jqの十八番と思える場面で使いこなせないのは、なかなか悔しいものがあります。 ツールを使うのが難しいなら、同じものを作ってしまえばよいのです。 jqの全ての機能を実装する jqを言語としてきちんと書けるようになる jqを完全に理解する jqの全ての機能を自分で実装してしまえば、jqがどういうものか、クエリがどのように処理されるのか、詳しくなれるはずです。 jqを得意な言語と言えるようになって、ク
joというJSONを組み立てるコマンドがあって、これは2016年からある便利なCLIツールなのですが、昨日急に思い立ってGo実装を作りました。 go get github.com/itchyny/gojo/cmd/gojo brewでもインストールできます。 brew install itchyny/tap/gojo 使い方はこんな感じ。 $ gojo foo=bar qux=quux {"foo":"bar","qux":"quux"} $ gojo -p foo=bar qux=quux { "foo": "bar", "qux": "quux" } $ gojo -a foo bar baz ["foo","bar","baz"] $ seq 10 | gojo -a [1,2,3,4,5,6,7,8,9,10] $ gojo -p foo=$(gojo bar=$(gojo baz
最近、複雑なJSONをElmで扱いたい的なことがあり、JSONとElmについて知ったのでまとめる。 (思いついたまま書いたので、二番煎じ以降だったらごめんなさい) 前置き ElmでJSONを扱うには とりあえず公式の、 https://package.elm-lang.org/packages/elm/json/latest/ を使いましょう。 公式でDecodeできる型 String Bool Int Float List,Array Dict null これとその他の関数を組み合わせて、あらゆる(正しい)JSONをパースして、必要な情報を取り出すことができる。 ただし、取り出すときに、取り出したい情報のkeyと型がすでにわかっていなければならない。 本題 ここで思いついてしまった。 「あらかじめ取り出したい値のkeyや型がわからない場合にも、とりあえずElmの世界に持っていきたい」 や
extendJSON.md JSONが対応していない値をJSONに保存する方法 JSONは NaN / Infinity / -Infinity や Date 型等に対応していない。 しかし、JavaScriptのJSONは、これらを解消する仕組みを持っている。 それは JSON.parse の第二引数の reviver とJSON.stringify の第二引数の replacer だ。 注意が必要なのは、 Date 型は toJSON メソッドを持つため replacer に値が渡る前に文字列になってしまうこと。 これに対応するには toJSON メソッドを一時退避してしまえば良い。 これらを上手く駆使すれば、JSONに型を保ったまま値を保存し復元することができる。 こんな感じ。 var original = { 'nan': NaN, '+inf': Number.POSITIVE_
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く