無効なパス式エラーを返す jq 式を修正するにはどうすればよいですか?

無効なパス式エラーを返す jq 式を修正するにはどうすればよいですか?

次のような package.json ファイルがあります:

{
  "name": "service",
  "version": "1.0.0",
  "private": true,
  "description": "my service",
  "license": "none",
  "scripts": {
    "build": "tsc"
  },
  "dependencies": {
    "@mycompany/mypackage": "1.1.1"
  }
}

@mycompany/mypackageのバージョンを「1.2.1」に更新したいのですが、次のような記事を見つけました。これそしてこれjqを提案します。

jq コマンドを実行するとjq -r '"dependencies.@mycompany/mypackage" |= "1.2.1"' package.json、次のエラーが発生します。jq: error (at temp.json:13): Invalid path expression with result "dependencies.@mycompany/m...

私が知る限り、私が使用したパスは正しいですjqプレイ

何が問題なのか、誰かアドバイスをくれませんか?

答え1

かなり近いです。と は@mycompany/mypackageどちらも特殊文字なので、キーを引用符で囲む必要がありますが、フィルター全体の一部としてではなく、個別に引用符で囲む必要があります。また、ルート オブジェクトを照会するには、先頭に が必要です。これで動作するはずです。@/.

$ jq -r '.dependencies."@mycompany/mypackage" |= "1.2.1"' package.json
{
  "name": "service",
  "version": "1.0.0",
  "private": true,
  "description": "my service",
  "license": "none",
  "scripts": {
    "build": "tsc"
  },
  "dependencies": {
    "@mycompany/mypackage": "1.2.1"
  }
}

関連情報