2016-05-04 7 views
0

Ich versuche, jq zu verwenden, wo meine Daten eine große Ganzzahl enthält. Beispiel:jq Runden großen Ganzzahlen, wenn es nicht sollte

$ cat door.json 
[ 
    { 
    "name": "Sliding Door 2", 
    "type": "MyAirtightSlideDoor", 
    "id": 130597706006447927, 
    "properties": { 
     "OnOff": "True", 
     "ShowInTerminal": "True", 
     "ShowInToolbarConfig": "True", 
     "ShowOnHUD": "False", 
     "Open": "True" 
    } 
    } 
] 

Okay, das ist eine gültige JSON-Datei, denke ich. Aber dann, als ich jq bitten, es zu analysieren, zerstört es die ID integer:

$ cat door.json | jq '.' 
[ 
    { 
    "name": "Sliding Door 2", 
    "type": "MyAirtightSlideDoor", 
    "id": 130597706006447920, 
    "properties": { 
     "OnOff": "True", 
     "ShowInTerminal": "True", 
     "ShowInToolbarConfig": "True", 
     "ShowOnHUD": "False", 
     "Open": "True" 
    } 
    } 
] 

Mein Endziel der Lage sein, ist id raus und nutzen sie tiefer in eine API abfragen, aber 130597706006447920 = 130597706006447927!.

Ich testete dies mit der 64-Bit-Binärversion für die Versionen 1.5, 1.4 und 1.3 auf einer Centos 7 x86_64 AWS-Instanz.

Jeder Eingang wäre genial.

+1

Der Grund dafür ist, dass jq intern 64-Bit Gleitkommazahlen verwendet. –

+0

Warum würde jq einfach lange ganze Zahlen stillschweigend zerstören? Sollte es nicht zumindest den Benutzer warnen? Irgendwelche Gedanken darüber, wie man das verhindern kann, ohne ID in einer Zeichenfolge zu speichern? –

+1

Entschuldigung, aber das Speichern der ID in einer Zeichenfolge ist der richtige Weg. Nicht, weil jq es ist oder nicht unterstützt, sondern weil IDs undurchsichtige Bezeichner sein sollen, deren einzige definierende Eigenschaft die Eindeutigkeit ist, während Zahlen mehr Bedeutungen haben (Addition, Subtraktion, ...) –

Antwort

0

können Sie Python Json verwenden, Es funktioniert, ich habe es getestet.

+0

Das OP fragt nach jq-Lösung. – darthsidious