用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