用bash读取package.json文件的name属性
我有这个:
str=`cat package.json` prop="name" my_val="$(node -e "console.log(JSON.parse(${str})[${prop}]);")" echo "$my_val"
我想读取package.json文件的name
属性。 我认为这是接近,但我得到一个JSON.parse错误:
SyntaxError: Unexpected token o in JSON at position 1 at Object.parse (native) at [eval]:1:18 at ContextifyScript.Script.runInThisContext (vm.js:25:33) at Object.runInThisContext (vm.js:97:38)
任何人知道如何解决?
这工作:
prop="name" my_val="$(node -e "console.log(require('./package.json')['$prop'])")" echo "json val: '$my_val'"
但我想知道如何做到这一点。
你正在得到一个JSONparsing错误,因为你正试图parsingstring
"[object Object]"
你应该改变你的bash脚本有:
node -e "console.log(JSON.parse(\`$str\`)['name'])"
注意反引号! 你的string是一个多行string。
这是一个运行(在我的项目目录之一):
$ str=`cat package.json` $ prop="name" $ myval="$(node -e "console.log(JSON.parse(\`$str\`)['$prop'])")" $ echo $myval plainscript
附录
为了响应OP希望使用require
而不是将文件内容回显为string,解决scheme可以如下所示:
$ prop="name" $ my_val="$(node -e "console.log(require('./package.json')['$prop'])")" $ echo $my_val plainscript
附录2
如果你使用-p
你甚至可以离开console.log
:
$ prop="name" $ my_val="$(node -pe "require('./package.json')['$prop']")" $ echo $my_val plainscript
在linux系统上有jq命令可以parsingJSON文件
jq -r ".name" package.json