2016-07-16 6 views
-1

私は実際に大きなconfig.jsonというファイルを取得して、ゲッターをpycharm IDEから生成しようとしています。Pycharmのjsonファイルからゲッターを自動生成する方法

import json 


class ConfigRead(object): 

    def __init__(self, file_path): 
     json_content = open(file_path).read() 
     self.jsonData = json.loads(json_content) 

    def get_config(self): 
     return self.jsonData 

    def get_key1(self): 
     return self.jsonData["key1"] 

1000ゲッターを入力して、何か私です:ConfigRead.pyクラスは、このようなもののように見える

{ 
    "key1" : "value1", 
    "key2" : "value2", 
    . 
    . 
    . 
    "key1000" : value1000 
} 

私のpython:

サンプルconfig.jsonは(. . .は、同様の項目の多くを示して)このようになります試したくない。

Eclipseには、設定ファイルからの自動生成アプローチがありました。私は移行しましたPyCharm &私はそれを把握することはできません。

単純にこのプロセスに役立ちます。ありがとう。

pythonでこれが悪いアプローチであると思われる場合は、私はまた、いかなる提案にも公開しています。私はそれが簡素化すれば私のデザインを変更することに開放しています&は物事をより管理しやすくします。

+0

これはプログラミング言語の悪い方法です。 'key1'を' keyN'にするのではなく、代わりにリスト(JSON配列)を使うのはなぜですか? – jonrsharpe

+0

私は今日jsonファイルのスキーマを変更するコントロールを持っていません。 – sudhishkr

+0

しかし、コード内の表現方法を変更することができます。また、getters自体はpythonicではありません。 – jonrsharpe

答えて

1

代わりに__getitem__の実装を検討しましたか? __getitem__は、[]演算子を使用できるようにする魔法の方法です。これは、設定ファイルが変更されるたびにソースコードを変更する必要がないため、やり遂げようとしているより持続可能なアプローチだと思います。私はあなたの特定のユースケースが何であるか分からないが、何かのように:

class ConfigRead(object): 

    def __init__(self, file_path): 
     json_content = open(file_path).read() 
     self.jsonData = json.loads(json_content) 

    def __getitem__(self, key): 
     return self.jsonData[key] 

を聞かせあなたのようなものを書く:

config = ConfigRead("path/to/file") 
name = config['key1'] 

をそれとも、あなたは追加の処理を持っていない場合設定データを処理したい場合は、次のように直接JSONデータを使用することができます。

def read_config(file_path): 
    with open(file_path) as config_file: 
     return json.load(config_file) 

config = read_config("path/to/file") 
name = config['key1'] 
+0

ありがとう@Tutleman、はいこれは私がバックアップとして持っていたものです。このアプローチの問題点は、キーがコードに抽象化されていないということです。つまり、サービス開発者がこれを消費すると、存在しないキーでフィードできます。それを避けるために私は上記のアプローチをしたいと思っていました。 – sudhishkr

+0

@sudhishkr存在しない値を読み取ろうとしている消費者について話していますか?そうであれば、それについてはあまりおこなわれません。開発者はゲッターの名前を間違って入力することもできます。その場合、AttributeErrorが発生します。この場合、 'KeyError'が発生します。 – Tutleman

+0

はい、私を正しく理解しました。私はそれが私の現在のアプローチにはあまりにも複雑ではまともな変化ではないと思う。おかげさま! – sudhishkr

関連する問題