2016-04-19 13 views
0

に基づいてJSONのフィールドを追加し、私は、入力ファイルの下にいる:JQのJSONパーサーが条件

[ 
{ 
    "macAddress": "22:00:10:21:ca:54", 
    "GeoCoordinate": { 
     "latitude": 1.2345, 
     "longitude": 123.4567, 
     "unit": "DEGREES" 
    } 
}, 
{ 
    "macAddress": "44:00:10:21:ca:14" 
}, 
{ 
    "macAddress": "33:00:11:21:ca:54", 
    "GeoCoordinate": { 
     "latitude": 2.1345544523, 
     "longitude": 123.45678, 
     "unit": "DEGREES" 
    } 
}, 
... 
] 

私は以下の出力を得るためにJSONを解析するjqプログラムを使用したい

[ 
"created_at": "2016-04-13T14:50:03+0800", 
{ 
    "macAddress": "22:00:10:21:ca:54", 
    "GeoCoordinate": { 
     "latitude": 1.2345, 
     "longitude": 123.4567, 
     "unit": "DEGREES" 
    }, 
    "loc": { 
     "lon": 123.4567, 
     "lat": 1.2345 
    } 
}, 
{ 
    "macAddress": "44:00:10:21:ca:14" 
}, 
{ 
    "macAddress": "33:00:11:21:ca:54", 
    "GeoCoordinate": { 
     "latitude": 2.1345544523, 
     "longitude": 123.45678, 
     "unit": "DEGREES" 
    }, 
    "loc": { 
     "lon": 123.45678, 
     "lat": 2.1345544523 
    } 
}, 
... 
] 

ますcreated_atフィールドを挿入したことがわかります。

また、GeoCoordinateフィールドの条件に基づいて緯度/経度のペアを追加しました。

これを達成するためにjqを使用する方法?

+1

あなたの所望の出力が有効なJSONではありませんあなたのcreated_atプロパティはので、ここで我々が行うことができる最も近いですが、その場所では無効です。配列にプロパティを配置することはできません。 'ISODate(" 2016-04-13T14:50:03 + 0800 ")'は有効なjson値ではありません。 –

+0

@JeffMercado、あなたのコメントを読んだ後、有効なjsonに出力を変更しました。 – Xianlin

+0

あなたの出力はまだ有効ではありませんjson。 '[" "foo:" bar "、{" a ":" b "、...}]'は無効です。 – hek2mgl

答えて

1

条件付きで緯度/経度のペアを追加するのは簡単です。 GeoCoordinateの値があるかどうかを確認し、ペアを追加してください。

{ 
    created_at: now | todate, 
    results: map(
     if .GeoCoordinate then 
      .loc = (.GeoCoordinate | { lon: .longitude, lat: .latitude }) 
     else 
      . 
     end 
    ) 
} 

これは、次のような結果をもたらすであろう:

{ 
    "created_at": "2016-04-19T20:09:35Z", 
    "results": [ 
    { 
     "macAddress": "22:00:10:21:ca:54", 
     "GeoCoordinate": { 
     "latitude": 1.2345, 
     "longitude": 123.4567, 
     "unit": "DEGREES" 
     }, 
     "loc": { 
     "lon": 123.4567, 
     "lat": 1.2345 
     } 
    }, 
    { 
     "macAddress": "44:00:10:21:ca:14" 
    }, 
    { 
     "macAddress": "33:00:11:21:ca:54", 
     "GeoCoordinate": { 
     "latitude": 2.1345544523, 
     "longitude": 123.45678, 
     "unit": "DEGREES" 
     }, 
     "loc": { 
     "lon": 123.45678, 
     "lat": 2.1345544523 
     } 
    } 
    ] 
}