質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

2回答

2750閲覧

jsonを複数件ずつ処理したい

kozica

総合スコア58

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2020/02/12 09:07

編集2020/02/12 09:17

以下のような何万とあるjsonを25件ずつ取得したいです。
DynamoDBにBatchWriteItemで25件ずつDeleteしていきたいためです。
{"notificationId":{"S": "aaaa"}}で1件と想定しています。

{ "notificationId": { "S": "aaaa" } } { "notificationId": { "S": "bbbb" } } { "notificationId": { "S": "cccc" } } { "notificationId": { "S": "dddd" } } { "notificationId": { "S": "eeee" } } . . . { "notificationId": { "S": "zzzz" } }

取得後はそれを変数にも入れてから以下処理をしてリクエストを投げます。

echo $items | jq '{"Key": .} | {"DeleteRequest": .}' | jq -s '.' | jq '{"'$table_name'": .}'

簡単そうでなかなかスマートにする方法が思いつかず質問させて頂きました。
(シェルスクリプト )
どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

jq コマンドに -c オプションを付与すれば各JSONオブジェクトがワンライナーで出力されます。
jq -c を通したあとに25行ずつに分割してみます。

bash

1# テストデータを作成 2$ head -n 14 test.json 3{ 4 "notificationId": { 5 "S": "aaaa" 6 } 7} 8{ 9 "notificationId": { 10 "S": "bbbb" 11 } 12} 13{ 14 "notificationId": { 15 "S": "cccc" 16 } 17 18# `jq -c` を通した後のデータを何行か確認 19$ cat test.json| jq -c .| head 20{"notificationId":{"S":"aaaa"}} 21{"notificationId":{"S":"bbbb"}} 22{"notificationId":{"S":"cccc"}} 23{"notificationId":{"S":"dddd"}} 24{"notificationId":{"S":"dddd"}} 25{"notificationId":{"S":"dddd"}} 26{"notificationId":{"S":"dddd"}} 27{"notificationId":{"S":"dddd"}} 28{"notificationId":{"S":"dddd"}} 29{"notificationId":{"S":"dddd"}} 30 31# 25行ごとにスプリットする 32$ cat test.json| jq -c .| split -l 25 33 34# ファイルが作成されているかを確認 35$ ls -l 36total 24 37-rw-rw-r-- 1 toshiaki_wakabayashi wheel 4600 2 13 23:13 test.json 38-rw-rw-r-- 1 toshiaki_wakabayashi wheel 800 2 13 23:13 xaa 39-rw-rw-r-- 1 toshiaki_wakabayashi wheel 800 2 13 23:13 xab 40-rw-rw-r-- 1 toshiaki_wakabayashi wheel 800 2 13 23:13 xac 41-rw-rw-r-- 1 toshiaki_wakabayashi wheel 800 2 13 23:13 xad 42 43# 確かにファイルの行数が25行ずつになっている 44$ wc -l x* 45 25 xaa 46 25 xab 47 25 xac 48 25 xad 49 100 total

投稿2020/02/13 14:16

genzouw

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kozica

2020/03/02 02:46

ありがとうございます!!
guest

0

元のデータがオブジェクトの集合が配列になっておらずカンマ区切りでもないので
JSONとは言えないですね。
そうなると5行ごとにデータ取得するなどの処理が妥当では?

投稿2020/02/12 09:18

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kozica

2020/02/12 09:22

ご指摘ありがとうございます! 一度空白を埋めて、その後 `}{` を`} {` と置換して配列に直して1件ずつ処理していくようにしようかと思います!
yambejp

2020/02/12 09:24

5行でひとかたまりなら25個データをとるなら 125行ごとにデータを取得し }{を},{に変更し、先頭に[、末尾に]をつければJSONデータになります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問