【jqコマンド】selectで(23) Failed writing bodyというエラーが出る | 瀬戸内の雲のように

【jqコマンド】selectで(23) Failed writing bodyというエラーが出る

Posted: 2018-01-08


スポンサーリンク

目次

背景

APIの試験やおためしで使う場合にcurlコマンドを使うのですが、
そこで得られた結果を加工する際にjqコマンドも一緒に良く使います。

今回はそんなjqコマンドを使っててプチハマりした内容をメモしておきます。

環境条件

・aws EC2
・amazon linux
・jq-1.5

起こったこと

jqコマンドではキーワードを指定して検索するselectという機能があります(SQLのselectと同じような使い方ができます。)
それを使った時に以下のようなエラーが出てしまいました。

[ec2-user@ip-172-31-30-171 ~]$ curl http://localhost:8080/blogs | jq ".[] | select( .title == 'test1')"
jq: error: syntax error, unexpected INVALID_CHARACTER (Unix shell quoting issues?) at <top-level>, line 1:
.[] | select( .title == 'test1')
jq: 1 compile error
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3790    0  3790    0     0   257k      0 --:--:-- --:--:-- --:--:--  264k
(23) Failed writing body

この時、返って来たjsonは以下なのでコマンド自体が間違っているわけでは無さそうです。

{
  "id": 1,
  "title": "test1",
  "content": "this is test dayo",
  "created_at": "2017-06-01T01:15:26.223Z",
  "updated_at": "2017-06-01T01:15:26.223Z"
}

原因

早速ですが原因はクォーテーションでした。
上記コマンドではjqコマンドの中身を"でくくり、検索するキーワードを'でくくっていますが、
正しくは逆にする必要がありました。

つまり正しいコマンドは以下の通りです。

curl -sS http://localhost:8080/blogs | jq '.[] | select(.title == "test1")'
{
  "id": 1,
  "title": "test1",
  "content": "this is test dayo",
  "created_at": "2017-06-01T01:15:26.223Z",
  "updated_at": "2017-06-01T01:15:26.223Z"
}

これでうまく行きました。

ただ本来はエラーが起きてるコマンドでも正しく動くはずなのにな~?と思ったりしますが。


スポンサーリンク




コメント一覧


コメントを投稿する


お名前


コメント内容





TOP back