2017-12-01 15 views
-1

<init>() @ JSONInputData.java:82のような値を収集する、次のようなJSONオブジェクトのリストを通過するシェルスクリプトをUnix上で実行しています。他にも値を取得したいオブジェクトがあります。JSONオブジェクト内の名前と値のペアのgrep

グリフよりも良い選択肢がありますか?"STACKTRACE_LINE",\n\s*.*を入力し、その結果を分割しますか?

inb4: "OSにXパッケージを追加"。一般的に実行する必要があります。

. . . 
"probableStartLocationView" : { 
    "lines" : [ { 
    "fragments" : [ { 
     "type" : "STACKTRACE_LINE", 
     "value" : "<init>() @ JSONInputData.java:82" 
    } ], 
    "text" : "<init>() @ JSONInputData.java:82" 
    } ], 
    "nested" : false 
}, 
. . . . 

私は、私はそれが同じファイルに記載されている他のイベントとイベント12345と関連付けられていないことを知っておく必要があることを知って、次のような一連のオブジェクトに"description" : "Dangerous Data Received"を探していましたか?

. . . 
"events" : [ { 
    "id" : "12345", 
    "important" : true, 
    "type" : "Creation", 
    "description" : "Dangerous Data Received", 
    . . . 
+1

「jq」などのJSONパーサーを見たり、JSONを理解するスクリプト言語を使用したりしてください。答えが必要な場合は、有効なJSONのより完全な例を掲載することをお勧めします(すべてではなく、代表的なものです)。 –

答えて

0

"STACKTRACE_LINE" のためにgrepをより良いオプションがあり、\ nは\ sの*。*し、その結果を分割?

はい。興味のある部分をフィルタリングして抽出するには、jqを使用します。これは、valueごとに1つの行を生成するために起こっている

jq -r '.probableStartLocationView.lines[] | .fragments[] | select(.type == "STACKTRACE_LINE") | .value' file.json 

typeは "STACKTRACE_LINE" である

{ 
    "probableStartLocationView": { 
    "lines": [ 
     { 
     "fragments": [ 
      { 
      "type": "STACKTRACE_LINE", 
      "value": "<init>() @ JSONInputData.java:82" 
      } 
     ], 
     "text": "<init>() @ JSONInputData.java:82" 
     } 
    ], 
    "nested": false 
    } 
} 

エキスvalue

例1は、このJSONを与えられました。

例2は、このJSONを与えられた:

{ 
    "events": [ 
    { 
     "id": "12345", 
     "important": true, 
     "type": "Creation", 
     "description": "Dangerous Data Received" 
    } 
    ] 
} 

エキスidここで、 "危険" とdescription開始:

jq -r '.events[] | select(.description | startswith("Dangerous")) | .id' 

のように。 例と機能の詳細については、jq manualを参照してください。 jq、 を使用してスタックオーバーフローに関する多くの質問があります。これは、適切なフィルタリングの組み合わせと関連する部分の抽出に役立ちます。

関連する問題