2017-07-04 1 views
0

ich so strukturierte Daten haben:erhalten Wert von unbekannten String Schlüsseleigenschaft, mit jq

{ 
    "data": { 
    "2017-06-20": { 
     "shifts": [ 
     { 
      "id": 24, 
      "shift_request_id": 24, 
      "created_at": "2017-06-27 15:10:50", 
      "updated_at": "2017-06-27 15:10:50" 
     }, 
     { 
      "id": 38, 
      "shift_request_id": 38, 
      "created_at": "2017-06-27 15:10:50", 
      "updated_at": "2017-06-27 15:10:50" 
     }, 
     { 
      "id": 85, 
      "shift_request_id": 85, 
      "created_at": "2017-06-27 15:10:51", 
      "updated_at": "2017-06-27 15:10:51" 
     } 
     ] 
    }, 
    ... 
    ... 
    ... 
    ... 
    "2017-06-21": { 
     "shifts": [ 
     { 
      "id": 26, 
      "shift_request_id": 26, 
      "created_at": "2017-06-27 15:10:50", 
      "updated_at": "2017-06-27 15:10:50" 
     }, 
     { 
      "id": 28, 
      "shift_request_id": 28, 
      "created_at": "2017-06-27 15:10:50", 
      "updated_at": "2017-06-27 15:10:50" 
     }, 
     { 
      "id": 88, 
      "shift_request_id": 88, 
      "created_at": "2017-06-27 15:10:51", 
      "updated_at": "2017-06-27 15:10:51" 
     } 
     ] 
    } 
    } 
} 

mit diesen Datums wie formatiert Tasten Also, lassen Sie uns sagen, dass ich shifts aus sagen extrahieren möchten, zuerst ein solches Schlüssel. Ich bin nicht daran interessiert, nach einem bestimmten Datum zu extrahieren, da dies einfach wäre, wenn man dieses Datum als einen Schlüssel angibt, sondern aus dem ganzen Satz, einem von ihnen oder einem Bereich, nach numerischem Index, sobald diese Schlüssel erhalten werden.

Ich habe versucht:

jq '.[] | keys' 

, die mir ein Array aller Schlüssel gibt, aber dann weiß ich nicht, wie ich Reihe von Verschiebungen für einen bestimmten Schlüssel durch Nummer indiziert extrahieren würde.

jq '.[] | keys[3]' 

gibt mir die vierte Schlüssel in einer Reihe, aber dann .shifts auf, die nicht funktionieren, sagen, dass es Cannot index string with string "shifts"

Antwort

0

von in diesem https://stackoverflow.com/a/34227629/2434479 suchen, konnte ich meinen Weg um diese finden Problem, also werde ich es hier als Referenz für jemanden aufbewahren, der sich in einer ähnlichen Situation selbst finden könnte.

So eine Art und Weise, es zu tun wäre:

❯ http ... | jq '.[] | to_entries[] | [.key, (.value.shifts | length)] | @csv' 

Und wenn bestimmte Schlüssel-Index benötigt, sagen 4. in der Reihe:

❯ http|curl ... | jq '.[] | keys_unsorted[3] as $k | "\($k), \(.[$k].shifts | length)"'