Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Linux中从JSON响应中提取ID_Linux_Json_Sed_Grep_Extract - Fatal编程技术网

在Linux中从JSON响应中提取ID

在Linux中从JSON响应中提取ID,linux,json,sed,grep,extract,Linux,Json,Sed,Grep,Extract,这是来自服务器的json响应。这个响应保存在一个名为TESTDEMO的变量中 { "objects":[ { "meta":{ "type":"test-folder", "@href":"{HOST_URL}/TsetRESTServices/objects/test-folder/0F071CE4-790D11E3-AAC0-005056A5408D", "name":"demo" }, "m

这是来自服务器的json响应。这个响应保存在一个名为TESTDEMO的变量中

{
"objects":[
   {
   "meta":{
          "type":"test-folder",
          "@href":"{HOST_URL}/TsetRESTServices/objects/test-folder/0F071CE4-790D11E3-AAC0-005056A5408D",
           "name":"demo"
          },
   "meta":{
          "type":"test-folder",
          "@href":"{HOST_URL}/TsetRESTServices/objects/test-folder/0F072CE4-190A11E3-AAC0-00AA56A5408K",
           "name":"folder "
          } 
    }]
 }
要提取文件夹
“name”:“demo”
的id
0F071CE4-790D11E3-AAC0-005056A5408D
。 需要帮助。

像这样吗

awk  -F"[/\"]" '/"name":"demo"/ {print $5}' RS="}" <<< "$variable"
0F071CE4-790D11E3-AAC0-005056A5408D
awk-F“[/\”]“/”name:“demo”/{print$5}”RS=“}”
sed-n'/“type:“test folder”/,/”name:“demo”/{s/[[:blank:][]*”@href:“{HOST_URL}/;s/”,$//p}试试这个:

根据名称demo将JSON重定向到sed命令和grep

echo $TESTDEMO | sed 's/{/\n{/g' | grep '"name":"demo"' | cut -d',' -f2 | cut -d'/' -f 7 | cut -d'}' -f 1 | cut -d '"' -f 1

希望这会有帮助。

如果“在Linux中”意味着使用命令行工具而不是编程语言,
jq
是JSON解析的有用工具。@ChrisB:OK。是否可以使用任何命令,如sed?JSON数据,我保存在变量中而不是文件中。语法不应用于变量。使用
awk-F“[/\]”name:“demo”/{print$5}'RS=“}”@ruifeng以5秒的优势击败我:)更新示例
echo $TESTDEMO | sed 's/{/\n{/g' | grep '"name":"demo"' | cut -d',' -f2 | cut -d'/' -f 7 | cut -d'}' -f 1 | cut -d '"' -f 1