我使用curl向网站发送请求以执行搜索并返回一些数据。输出如下:
[{"label":"Statham, john smith (2122)","value":"Statham,
john smith","cat_id":"wew","talking" :"9999990F5ECC8300000000CC","spanner"
:null,"class":"f","id":"9999990F5ECC83000013D5CC"}]
是否可以从这个数据中提取数据作为某种数组,以便我可以将每个varavle称为可变数据?
例如,我想最后一个变量用于标签为“id”的最后一个字段,数据为“9999990F5ECC83000013D5CC
”
所以当我拨打$ id时,我会得到9999990F5ECC83000013D5CC
由于
答案 0 :(得分:0)
假设$a
设置为等于你的json字符串,
$b = json_decode($a,true);
会使$b
成为关联数组,以便$b['id']
是您想要的值
答案 1 :(得分:0)
因为你想要一个bash解决方案,所以完全是新答案。这需要手动解析JSON对象,因为bash没有内置功能。</ p>
以下是https://gist.github.com/cjus/1047794的快速修改内容 - 我添加了| sed 's/\]//'
,因为原始版本在返回值中留下了最后一个括号。我没有完全分析正则表达式的构造 - 我发现正则表达式通常可以用几种方式编码,结果相同。
#!/bin/bash
function jsonval {
temp=`echo $json | sed 's/\\\\\//\//g' | sed 's/[{}]//g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | sed 's/\"\:\"/\|/g' | sed 's/\]//' | sed 's/[\,]/ /g' | sed 's/\"//g' | grep -w $prop`
echo ${temp##*|}
}
json='[{"label":"Statham, john smith (2122)","value":"Statham, john smith","cat_id":"wew","talking":"9999990F5ECC8300000000CC","spanner":null,"class":"f","id":"9999990F5ECC83000013D5CC"}]'
prop='id'
val=`jsonval`
echo $prop': '$val
在调用json
之前,您需要修改它以使用curl调用来设置jsonval
- 我的示例是runnable as-is,以显示它从对象中提取正确的字符串。
答案 2 :(得分:0)
我的Xidel可以做到这一点。
例如id
变量:
eval "$(xidel your-data-source --input-format json --output-format bash -e 'id := $json//id' )"
可以使用id := $json//id, label := $json//label
创建多个变量,数据源可以是网址,因此您甚至不需要卷曲。