web-dev-qa-db-fra.com

Comment convertir une chaîne en entier dans un fichier JSON en utilisant jq?

J'utilise jq pour transformer un objet json complexe en un objet plus petit. Ma requête est:

jq 'to_entries[]| {companyId: (.key), companyTitle: (.value.title), companyCode: (.value.booking_service_code)}' companies.json

Maintenant le (.key) est analysé comme une chaîne, mais je veux que companyId soit un nombre.

Mon résultat ressemble actuellement à ceci:

{
  "companyId": "1337",
  "companyTitle": "Some company title",
  "companyCode": "oxo"
}

mais cela devrait être comme:

{
  "companyId": 1337,
  "companyTitle": "Some company title",
  "companyCode": "oxo"
}
17
k0pernikus

jq a des fonctions intégrées, vous pouvez diriger votre clé vers tonumber :

jq 'to_entries[]| {companyId: (.key)|tonumber, companyTitle: (.value.title), companyCode: (.value.booking_service_code)}' companies.json

Selon les documents:

tonumber La fonction tonumber analyse son entrée sous forme de nombre. Il convertira les chaînes correctement formatées en leur équivalent numérique, laissera les nombres seuls et donnera une erreur sur toutes les autres entrées.

Example jq '.[] | tonumber' Input [1, "1"] Output 1 1

18
k0pernikus