使用ksh从JSON读取字符串

时间:2017-02-15 14:45:44

标签: shell ksh

{

  "assignedTo": [

    "Daniel Raisor",
    "Dalton Leslie",
    "Logan Petro"  
]

}

我想提取Daniel Raisor Dalton Leslie和Logan Petro并将这些分配给一个单独的变量,如assignedTo = Daniel Raisor,Dalton Leslie,Logan Petro 我的unix也不支持jq,我需要使用grep或sed命令

2 个答案:

答案 0 :(得分:1)

使用适当的JSON解析器来解析JSON。即使你没有jq,Python解释器也包含一个非常好的解释器,以下示例脚本使用它:

#!/bin/ksh
# note: this was tested with ksh93u+ 2012-08-01
# to use with Python 3 rather than Python 2, replace "pipes" with "shlex"

json='{"assignedTo": ["Daniel \"The Man\" Raisor","Dalton Leslie","Logan Petro"]}'

getEntries() {
  python -c '
import json, sys, pipes

content = json.load(sys.stdin)
for name, values in content.iteritems():
  print("%s=%s" % (pipes.quote(name), pipes.quote(",".join(values))))
'
}

eval "$(getEntries <<<"$json")"
echo "$assignedTo"

...正确发出以下输出:

Daniel "The Man" Raisor,Dalton Leslie,Logan Petro

答案 1 :(得分:-1)

如果您可以保证格式如上,请尝试:

sed "s/^ *//" input.json | sed "s/: /=/" | tr -d '\n[]"{}'

上面删除了每一行的所有前导空格,用等号替换了冒号,然后删除了无关的字符。