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

从curl提供的字符串中提取变量,curl,grep,Curl,Grep,我使用curl向网站发送请求,以执行搜索并返回一些数据。输出如下所示: [{"label":"Statham, john smith (2122)","value":"Statham, john smith","cat_id":"wew","talking" :"9999990F5ECC8300000000CC","spanner" :null,"class":"f","id":"9999990F5ECC83000013D5CC"}] 是否可以从这个数组中提取数据,这样我就可以将每个vara

我使用curl向网站发送请求,以执行搜索并返回一些数据。输出如下所示:

[{"label":"Statham, john smith (2122)","value":"Statham, 
john smith","cat_id":"wew","talking" :"9999990F5ECC8300000000CC","spanner"
:null,"class":"f","id":"9999990F5ECC83000013D5CC"}]
是否可以从这个数组中提取数据,这样我就可以将每个varavle作为varable调用

例如,我希望最后一个字段有一个变量,它的标签为“id”,数据为“
9999999 0F5ECC83000013D5CC

因此,当我调用$id时,我得到
9999990F5ECC83000013D5CC


谢谢

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

$b = json_decode($a,true);
将使
$b
成为关联数组,以便
$b['id']
是您想要的值


更多信息:

全新答案,因为您需要bash解决方案。这需要手动解析JSON对象,因为bash没有内置的JSON对象

这是一个快速而肮脏的修改,源于-I添加了
| 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
#/bin/bash
函数jsonval{
temp=`echo$json | sed's/\\/\///g''sed's/[{}]//g''awk-vk=“text”{n=split($0,a,,”);for(i=1;iMy可以这样做

例如,对于
id
变量:

eval "$(xidel your-data-source --input-format json --output-format bash -e 'id := $json//id'  )"

可以使用
id:=$json//id,label:=$json//label
创建多个变量,并且数据源可以是url,因此您甚至不需要curl了。

感谢您的消息。这帮助我理解我从网站获得的输出是json。我如何在bash脚本中使用json_解码来获取id变量e我想要?谢谢这对我来说很好用,也很容易理解。非常感谢。我确实看过jsawk,它看起来可以像预期的那样工作,但我不能让它像我的发行版上的这个解决方案那样工作。再次感谢:)有混合的bash/php解决方案,但是bash/sed/awk是一个经典的组合-快速和准确,如果有时看起来有点奇怪,主要是因为regex的东西。是的,最好还是坚持使用标准的东西,因为它总是可用的。我们如何增强这个脚本以响应一个简单的数组?是的,我知道这是我们开始使用的东西,但我不知道有一个更大的版本,我只需要从整个JSONTH页面中取出4个变量,这非常复杂,我会使用一个php脚本,就像我原来的示例一样。使用这个脚本一段时间后,我重建了我的服务器,现在它坏了。我需要安装什么才能运行该脚本?目前我使用的是centos 6.6和php版本PHP5.3.3