从curl提供的字符串中提取变量

时间:2014-04-15 12:38:45

标签: curl grep

我使用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

由于

3 个答案:

答案 0 :(得分:0)

假设$a设置为等于你的json字符串,

$b = json_decode($a,true);

会使$b成为关联数组,以便$b['id']是您想要的值

了解更多:http://php.net/manual/en/ref.json.php

答案 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创建多个变量,数据源可以是网址,因此您甚至不需要卷曲。