我有这个:
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'"
但我想知道如何以第一种方式做到这一点。
答案 0 :(得分:4)
在linux系统上有命令jq,它可以解析JSON文件
jq -r ".name" package.json
答案 1 :(得分:1)
您收到JSON解析错误,因为您正在尝试解析字符串
"[object Object]"
您应该将bash脚本更改为:
node -e "console.log(JSON.parse(\`$str\`)['name'])"
请注意反引号!你的字符串是一个多行字符串。
这是一个运行(在我的一个项目目录中):
$ str=`cat package.json`
$ prop="name"
$ myval="$(node -e "console.log(JSON.parse(\`$str\`)['$prop'])")"
$ echo $myval
plainscript
<强>附录强>
为了响应OP希望使用require
而不是将文件内容回显为字符串,解决方案如下:
$ prop="name"
$ my_val="$(node -e "console.log(require('./package.json')['$prop'])")"
$ echo $my_val
plainscript
ADDENDUM 2
如果您使用console.log
:
-p
$ prop="name"
$ my_val="$(node -pe "require('./package.json')['$prop']")"
$ echo $my_val
plainscript