2016-07-12 11 views
0

私は、互いに似ているが同一ではないオブジェクトを含むJSONファイルを持っています。すべてのオブジェクトにはメインIDがありますが、他のキーがオブジェクト内に存在する場合と存在しない場合があります。JQを使用したキーの存在または非存在に作用

私の質問:オブジェクト内の特定のキーについては、値が存在すればそれをどのように出力するのですか?そうでない場合は "NA"のようなものです。

サンプル入力:

{ 
     "DBInstances": [ 
      { 
       "Identifier": 101, 
       "foo": "some_value", 
       "bar": 60, 
       "Model": "A" 
      }, 
      { 
       "Identifier": 102, 
       "foo": "some_value", 
       "Model": "B" 
      } 
     ] 
    } 

所望の出力:

  { 
       "Identifier": 101, 
       "foo": "some_value", 
       "bar": 60, 
       "Model": "A" 
      }, 
      { 
       "Identifier": 102, 
       "foo": "some_value", 
       "bar": "NA", 
       "Model": "B" 
      } 

私は(一部)働く機能を作成した非存在のためではなく、全く存在について:

def exist(element): 
    if (has(element) == true) 
    then { element: "true" } 
    else { element: "NA" } 
    end; 

私が電話したとき:

exist("bar") 

JQが元のキーの名前と値ではなく "要素"と "真"を印刷するという点で、存在する部分は完全に間違っています。

「存在しない」部分については、「NA」は元のキー名ではなく「要素」と表示されます。

私はJQ 1.3で作業しています。

def exist(element): 
    if has(element) 
    then { (element): .[element] } 
    else { (element): "NA" } 
    end; 

これはJQ 1.3でテストされていますが、より新しいバージョンにアップグレードしてみてください。

答えて

1

はここにあなたの「存在」の定義を記述するための正しい方法です。実際に

、一つはこのようなイディオムを使用する可能性が高い。ここ

if has(element) then . else .[element] = "NA" end 
関連する問題