2017-03-03 42 views
2

如何在python中執行JSON模式轉換? 我知道Jolt服務於這個目的,但它的Java。 我有2個JSON對象,其中一個是輸入,另一個是映射器。我試圖通過走2個json對象並應用轉換來實現這一點。但是,我不確定它是否有效。python中的JSON模式轉換

下面是一個例子:

輸入

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

輸出

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

@FranzKafka,如何有關使用JSONPath-RW讀取源,並創建一個新的json out of it –

+1

ping @ franz-kafka IIRC你已經在這個問題上付出了代價,但是現在它已經關閉了,希望你能提供一些反饋。 – georgexsh

+0

@georgexsh我現在如何接受答案,並在問題已經結束後給予獎勵?我覺得這個問題最初是誠實的,最終被封閉了,這真是荒謬。無論如何,你的答案是好的,因爲它可以幫助我。我只是希望有些東西可以讓JSON類型的DSL像Jolt一樣,你可以在JSON中編寫規範,然後用它作爲輸入如何轉換爲輸出的說明。 –

回答

3

聽起來像是你需要的東西可以用jq完成。有python綁定,請參閱this question

但是不知道你的輸入和輸出格式,它不能說輕輕jq是你的選擇。


作爲一個例子使用pyjq採取JSON輸入在this question

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)) 

收率:

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