我有这个:
str=`cat package.json`
prop="name"
my_val="$(node -e "console.log(JSON.parse(${str})[${prop}]);")"
echo "$my_val"
我想读取name
文件的package.json属性。我认为这是近在咫尺,但我得到了一个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'"
但我想知道第一条路该怎么做。
发布于 2017-11-11 05:48:28
您正在获得一个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
增编
对于希望使用require
而不是将文件的内容回显为字符串的OP,解决方案如下:
$ prop="name"
$ my_val="$(node -e "console.log(require('./package.json')['$prop'])")"
$ echo $my_val
plainscript
增编2
如果使用console.log
,甚至可以关闭-p
。
$ prop="name"
$ my_val="$(node -pe "require('./package.json')['$prop']")"
$ echo $my_val
plainscript
发布于 2017-11-11 05:58:34
在linux系统中,有一个命令jq可以解析JSON文件
jq -r ".name" package.json
https://stackoverflow.com/questions/47234740
复制相似问题