用 jq 替换多个 JSON 对象的所有值
Replacing all values of multiple JSON objects with jq
我正在尝试使用 jq.
将 JSON 对象的所有值替换为 *
(星号字符)
这是我的 package.json 文件:
{
"name": "project",
"version": "0.0.1",
"description": "project-desc",
"main": "gulpfile.js",
"directories": {
"test": "tests"
},
"dependencies": {
"babel-polyfill": "^6.7.4",
"babel-preset-es2015": "^6.6.0",
"babel-preset-react": "^6.5.0",
"gulp-clean": "^0.3.2",
"jquery": "^2.1.4",
"lodash": "^4.0.0",
"moment": "^2.13.0",
"moment-timezone": "^0.5.0",
"radium": "^0.16.2",
"react": "^15.1.0",
"react-bootstrap-sweetalert": "^1.1.10",
"react-dom": "^15.1.0",
"react-timeago": "^2.2.1",
"sprintf": "^0.1.5",
"smoothscroll": "~0.2.2"
},
"devDependencies": {
"babel": "^6.3.26",
"babelify": "^7.2.0",
"browserify": "^12.0.1",
"console-stamp": "^0.2.0",
"estraverse-fb": "^1.3.1",
"gulp": "^3.9.0",
"gulp-concat": "^2.6.0",
"gulp-sass": "^2.1.1",
"gulp-sourcemaps": "^1.6.0",
"gulp-util": "^3.0.7",
"lodash": "^4.5.1",
"lodash.assign": "^3.2.0",
"lodash.isfunction": "^3.0.8",
"lodash.reduce": "^4.3.0",
"node-sass": "^3.4.2",
"react-bootstrap": "^0.29.4",
"react-intl": "^2.1.0",
"reactify": "^1.1.1",
"sweetalert": "^1.1.3",
"vinyl": "^1.1.0",
"vinyl-buffer": "^1.0.0",
"vinyl-source-stream": "^1.1.0",
"watchify": "^3.4.0",
"jsx-to-string": "~0.2.11"
},
"optionalDependencies": {
"pkg-save": "~1.0.2"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "mygiturl"
},
"author": "authorname",
"license": "MIT"
}
我想用星号替换 dependencies
、devDependencies
和 optionalDependencies
对象的所有值,如下所示(下面的缩写示例):
...
"devDependencies": {
"babel": "*",
"babelify": "*",
"browserify": "*",
"console-stamp": "*",
...
这是我正在使用的过滤器:
.dependencies, .devDependencies, .optionalDependencies | .foreach .[] as $item ([]; $item = "*")
在命令行中传递为:
cat package.json | jq '.dependencies, .devDependencies, .optionalDependencies | .foreach .[] as $item ([]; $item = "*")'
它返回了一个错误,而不是想要的结果:
error: syntax error, unexpected '[', expecting IDENT
.dependencies, .devDependencies, .optionalDependencies | .foreach .[] as $item ([]; $item = "*")
^
1 compile error
不仅仅是一个语法错误,我确信它只是在操纵顶级项目,而不是我打算做的对象中的每个键值对。
参考文献及相关问题:
完成任务最直接的方法可能是使用以下过滤器:
.dependencies |= map_values("*")
| .devDependencies |= map_values("*")
| .optionalDependencies |= map_values("*")
为避免重复:
(.dependencies, .devDependencies, .optionalDependencies) |= map_values("*")
您可以利用逗号运算符一次性更新所有内容。要将所有值更新为 "*"
,您可以这样做:
.["dependencies", "devDependencies", "optionalDependencies"] |= map_values("*")
我正在尝试使用 jq.
将 JSON 对象的所有值替换为*
(星号字符)
这是我的 package.json 文件:
{
"name": "project",
"version": "0.0.1",
"description": "project-desc",
"main": "gulpfile.js",
"directories": {
"test": "tests"
},
"dependencies": {
"babel-polyfill": "^6.7.4",
"babel-preset-es2015": "^6.6.0",
"babel-preset-react": "^6.5.0",
"gulp-clean": "^0.3.2",
"jquery": "^2.1.4",
"lodash": "^4.0.0",
"moment": "^2.13.0",
"moment-timezone": "^0.5.0",
"radium": "^0.16.2",
"react": "^15.1.0",
"react-bootstrap-sweetalert": "^1.1.10",
"react-dom": "^15.1.0",
"react-timeago": "^2.2.1",
"sprintf": "^0.1.5",
"smoothscroll": "~0.2.2"
},
"devDependencies": {
"babel": "^6.3.26",
"babelify": "^7.2.0",
"browserify": "^12.0.1",
"console-stamp": "^0.2.0",
"estraverse-fb": "^1.3.1",
"gulp": "^3.9.0",
"gulp-concat": "^2.6.0",
"gulp-sass": "^2.1.1",
"gulp-sourcemaps": "^1.6.0",
"gulp-util": "^3.0.7",
"lodash": "^4.5.1",
"lodash.assign": "^3.2.0",
"lodash.isfunction": "^3.0.8",
"lodash.reduce": "^4.3.0",
"node-sass": "^3.4.2",
"react-bootstrap": "^0.29.4",
"react-intl": "^2.1.0",
"reactify": "^1.1.1",
"sweetalert": "^1.1.3",
"vinyl": "^1.1.0",
"vinyl-buffer": "^1.0.0",
"vinyl-source-stream": "^1.1.0",
"watchify": "^3.4.0",
"jsx-to-string": "~0.2.11"
},
"optionalDependencies": {
"pkg-save": "~1.0.2"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "mygiturl"
},
"author": "authorname",
"license": "MIT"
}
我想用星号替换 dependencies
、devDependencies
和 optionalDependencies
对象的所有值,如下所示(下面的缩写示例):
...
"devDependencies": {
"babel": "*",
"babelify": "*",
"browserify": "*",
"console-stamp": "*",
...
这是我正在使用的过滤器:
.dependencies, .devDependencies, .optionalDependencies | .foreach .[] as $item ([]; $item = "*")
在命令行中传递为:
cat package.json | jq '.dependencies, .devDependencies, .optionalDependencies | .foreach .[] as $item ([]; $item = "*")'
它返回了一个错误,而不是想要的结果:
error: syntax error, unexpected '[', expecting IDENT
.dependencies, .devDependencies, .optionalDependencies | .foreach .[] as $item ([]; $item = "*")
^
1 compile error
不仅仅是一个语法错误,我确信它只是在操纵顶级项目,而不是我打算做的对象中的每个键值对。
参考文献及相关问题:
完成任务最直接的方法可能是使用以下过滤器:
.dependencies |= map_values("*")
| .devDependencies |= map_values("*")
| .optionalDependencies |= map_values("*")
为避免重复:
(.dependencies, .devDependencies, .optionalDependencies) |= map_values("*")
您可以利用逗号运算符一次性更新所有内容。要将所有值更新为 "*"
,您可以这样做:
.["dependencies", "devDependencies", "optionalDependencies"] |= map_values("*")