2017-03-03 1 views
2

Wie JSON-Schema-Konvertierung in Python zu tun? Ich weiß, Jolt dient diesem Zweck, aber es ist in Java. Ich habe 2 JSON-Objekte, von denen eines die Eingabe und das zweite der Mapper ist. Ich habe versucht, dies zu implementieren, indem ich die 2 Json-Objekte begehe und die Transformation anwende. Ich bin mir jedoch nicht sicher, ob es ein effizienter Weg ist.JSON-Schema-Konvertierung in Python

Hier ist ein Beispiel:

Eingang

{ 
    "name": "Bob Odenkirk", 
    "title": "Software Engineer", 
    "location": { 
     "locality": "San Francisco", 
     "region": "CA", 
     "country": "United States" 
    }, 
    "age": 62, 
    "status": "Active" 
} 

Ausgabe

{ 
    "names": ["Bob Odenkirk"], 
    "occupations": ["Software Engineer"], 
    "locations": ["San Francisco, CA"]  
} 
+0

@FranzKafka, wie etwa JSONPath-rw mit Quelle zu lesen und eine neue erstellen Json aus –

+1

Ping @ Franz-Kafka IIRC Sie haben eine Prämie auf diese Frage gestellt, aber jetzt ist es geschlossen, hoffe, Sie könnten ein Feedback geben. – georgexsh

+0

@georgexsh Wie akzeptiere ich die Antwort und gebe Ihnen das Kopfgeld jetzt, dass die Frage geschlossen ist? Ich finde es lächerlich, dass diese Frage an erster Stelle geschlossen wurde, um ehrlich zu sein. Wie auch immer, deine Antwort ist gut, sie hilft mir. Ich habe nur gehofft, dass da draußen etwas ist, das einen JSON-Typ DSL wie Jolt erlaubt, wo man die Spezifikation in JSON schreiben und dann als Anleitung dafür verwenden kann, wie die Eingabe in Ausgabe umgewandelt wird. –

Antwort

3

Ton wie Ihr Bedürfnis, etwas ist, kann mit jq erfolgen. Es gibt Python-Bindungen, siehe this question.

Aber ohne Ihr Eingabe- und Ausgabeformat zu kennen, kann nicht leicht gesagt werden, dass jq Ihre Wahl ist.


Nehmen Sie die JSON-Eingang in this question als ein Beispiel pyjq mit:

import json 
import pyjq 


json_input = json.loads("""{ 
    "name": "Bob Odenkirk", 
    "title": "Software Engineer", 
    "location": { 
     "locality": "San Francisco", 
     "region": "CA", 
     "country": "United States" 
    }, 
    "age": 62, 
    "status": "Active" 
}""") 

r = pyjq.one(
    '{names: [.name], occupations: [.title], locations: [.location.locality + ", " + .location.region]}', 
    json_input, 
) 

print(json.dumps(r, indent=4)) 

ergibt:

{ 
    "names": [ 
     "Bob Odenkirk" 
    ], 
    "occupations": [ 
     "Software Engineer" 
    ], 
    "locations": [ 
     "San Francisco, CA" 
    ] 
}