2017-12-15 10 views
0

私はいくつかのAPIを実行するシェルスクリプトを書いています。それは応答をうまく返しますが、私は応答からgrepするためのいくつかの特定のパラメータが必要とファイルに保存したい。 私のスクリプトはシェルスクリプトのJsonオブジェクトを反復する方法

#!/bin/sh 
response=$(curl 'https://example.com' -H 'Content-Type: application/json') 
echo "$response" 

REPONSEが

{ 
status:"success", 
response:{ 
    "target":"", 
    "content":"test content" 
} 
} 

レスポンスは結構です、私は、ファイル全体の応答を書くことができていますが、私の要件は唯一の「コンテンツ」内の「応答」を保存することであるようなものであるように見えますスクリプトを使用してオブジェクト。私は別のAPIに必要です。 注:私はサードパーティのAPIを使用しているため、APIの応答を変更することはできません。

あなたは

答えて

0

あなたは、変数($content)へのコンテンツの値を取得するには、これを行うことができますありがとうございました。

content=$(echo "$response" | cut -d'"' -f 7)

説明 - 区切り文字として使用して$response"(二重引用符)を分割し、ここで

(JSONレスポンスにcontentのすなわち値(test content))出力の第七フィールドを使用しますcutコマンドの説明と使用法の抜粋です。

フィールド全体を抽出する場合は、オプション-fと-dを組み合わせることができます。オプション-fは、抽出するフィールドを指定し、オプション-dは、入力ファイルで使用されるフィールド区切り文字を指定します。出力が正しいJSONであれば

grep "\"content\":" | awk -F":" '{ print $2}' 

あなたはその後、 contentため grepとは :によって分割され、唯一の値を取るためにはawkを使用することができます
+1

回答ありがとうございます、grep "\" content \ ":" | awk -F ":" '{print $ 2}' – Teekay

0

、キーではないが"test content"

+0

ありがとう@Robert D.Magos それは働いた:) – Teekay

0

を出力します:

$ cat proper.json 
{ 
    "status": "success", 
    "response": { 
    "target": "", 
    "content": "test content" 
    } 
} 
$ response=$(cat proper.json) 

jqを使用できます。

$ echo $response | jq -r '.response.content' 
test content 
関連する問題