あとやっぱり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 ってこういう使い方しか出来ないもんだと思ってるのですが世界が揺れ動いている
echo '[1,2,3]' | jq 'reduce .[] as $x (0; if $x >= 2 then . + $x else . end)' #=> 5
ポックラ神に間もなくなれそう




ポプ初め





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