2017-03-03 11 views
2

PythonでJSONスキーマ変換を行う方法は? 私はJoltがJavaでこの目的を果たしていることを知っています。 私は2つのJSONオブジェクトを持っています.1つは入力であり、もう1つはマッパーです。私は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 it –

+1

ping @ franz-kafka IIRCあなたはこの質問に恩恵を掛けましたが、今は閉じています。 – georgexsh

+0

@georgexsh質問が終了したので、どのように回答を受け入れて賞金を得るのですか?私は、この質問が正直に最初に閉じられているのはばかげていることがわかります。とにかく、あなたの答えは私に役立つので、良いです。 JoltのようなJSON型のDSLをJSONで記述し、入力を出力に変換する方法の指示として使用できるものがあると思っていました。 –

答えて

3

サウンドは何かがjqで行うことができます。 Pythonバインドがあります。this questionを参照してください。

あなたの入力と出力の形式を知らなくても、軽くjqと言うことはできません。


pyjqを使用して、例としてthis questionでJSON入力してください:

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" 
    ] 
} 
関連する問題