Avatar
ka
b75ef7bde2d6319f278727ac2cc4a7fdbeae2370cad22de960dd6ecfe0545a1b

あとやっぱりJSONLがjqにも凄く相性が良いことも今日の学びとして得られたのでもっと活用していきたい

正月休みとは思えないほど何かしらの有益な作業をしている

コンテナイメージが300MBくらい減りましたヤッター

もう任意のJSONをjqで片付けられるわ…複雑なJSON読むためだけにPythonだRubyだを追加するのほんとアホらしかったから…

これでもう Python だの Ruby だの使わんでいける!

はーやっと納得して select して select して map して map して add する jq のフィルターが書けたああああ!

これ絶対寝て起きたら忘れてるよ!!!!

map(f) は [.[] | f] を実装しているだけ,

と知っていれば,理解出来ていれば

[.[] | select(f)] を map(select(f)) にする

としてすんなり理解出来たとも思います.

私はそもそも最初

> echo '[1,2,3]' | jq '[.[] | select(. >= 2)] | add' #=> 5

> を何と言うか [.[] | select()] と一旦ストリームにしてから配列に再構築するんじゃなくて

> echo '[1,2,3]' | jq '. | filter(. >= 2)] | add' #=> 5

> みたいに配列のまま扱う何かは無いもんか

と,配列のまま扱う何かを求めていたのですが,そもそも map(f) を使ったとて [.[] | f] してるのであればそれは「配列のまま扱ってるわけじゃない」のであって,そこもおかしかった.

これ寝て起きたら忘れてるなぁああああ

.[] が配列をバラすのです

map は配列にしか使えない…というより map(f) は [.[] | f] をやってるということ,か…

map(.) は [.[] | .] と同じか…そうか

map(f) は [.[] | f] と同じと言われれば map(select(f)) も [.[] | select(f)] と同じよな

> map(f) is equivalent to [.[] | f] and map_values(f) is equivalent to .[] |= f.

https://jqlang.org/manual/#map-map_values

これがどうも重要なニオイがする

んなこと言っとる場合ではなくて

公式ドキュメントと完全に同じ例 (1,2,3 -> 2,3) を自分でも作っててウケる

selectはJSONの配列を返すんじゃなくて配列をバラしたものを受け取ってバラしたまま返すから,以下の2つが明確に違い,mapに渡すことが出来るのは前者の方のはずなのだが…的な理解です.現状整理.

echo '[{"a":1},{"a":2},{"a":3}]' | jq '[.[] | select(.a >= 2)]'

#=>

# [

# {

# "a": 2

# },

# {

# "a": 3

# }

# ]

echo '[{"a":1},{"a":2},{"a":3}]' | jq '.[] | select(.a >= 2)'

#=>

# {

# "a": 2

# }

# {

# "a": 3

# }

echo '[{"a":1},{"a":2},{"a":3}]' | jq '[.[] | select(.a >= 2)] | map(.a) | add'

こういうのがmapの使い方…という認識

echo '[1,2,3]' | jq '[.[] | select(. >= 2)] | map(.) | add'

今の私の理解では map ってこういう使い方しか出来ないもんだと思ってるのですが世界が揺れ動いている

ポックラ神に間もなくなれそう

ポプ初め

デスゲーム!0078時で,また会おう!

Lumilumi投稿テスト

Nostter投稿テスト

Rabbit投稿テスト

お年玉zapをする準備が多分出来ましたのでリプライをお待ちしております.またこの投稿のリポストも新アカウント周知のためにして頂けると嬉しいです.