2017-09-20 6 views
1

まず、コメントが有効なjsonではないことを理解します。それは何らかの理由で私が処理しなければならないこの.jsonファイルには、行頭と行末にコメントがあります。Pythonでコメントを持つ.jsonファイルの読み込みをどのように処理できますか?

私はこれをPythonで処理し、基本的に.jsonファイルを読み込むことができますが、コメントを無視して処理できますか?私は現在、次のようにしています。

しかし、ファイルfにコメントがあるので、json.load(f)コマンドでクラッシュします。

これは一般的な問題だと思っていましたが、私は多くのオンラインREを見つけることができません。誰かがcommentjsonを提案したが、それは私が

思考commentjsonインポートすると

ImportError: cannot import name 'dump' 

を言って私のスクリプトがクラッシュするのですか?

編集: これは、私が処理しなければならないjsonファイルのスニペットです。

{ 
    // this configuration file works by first loading all top-level 
    // configuration items and then will load the specified environment 
    // on top, this provides a layering affect. environment names can be 
    // anything, and just require definition in this file. There's 
    // two predefined environments, 'backtesting' and 'live', feel free 
    // to add more! 

    "environment": "backtesting",// "live-paper", "backtesting", "live-interactive", "live-interactive-iqfeed" 

    // algorithm class selector 
    "algorithm-type-name": "BasicTemplateAlgorithm", 

    // Algorithm language selector - options CSharp, FSharp, VisualBasic, Python, Java 
    "algorithm-language": "CSharp" 
} 
+1

jsonファイルのスニペットをコメントで投稿できますか? –

+0

@ Jean-FrançoisFabreが追加されました! –

答えて

0

(JSONデータ内//がある場合、それは失敗するため)ハックのようなものが、ほとんどの場合のための十分なシンプル:

import json,re 

s = """{ 
    // this configuration file works by first loading all top-level 
    // configuration items and then will load the specified environment 
    // on top, this provides a layering affect. environment names can be 
    // anything, and just require definition in this file. There's 
    // two predefined environments, 'backtesting' and 'live', feel free 
    // to add more! 

    "environment": "backtesting",// "live-paper", "backtesting", "live-interactive", "live-interactive-iqfeed" 

    // algorithm class selector 
    "algorithm-type-name": "BasicTemplateAlgorithm", 

    // Algorithm language selector - options CSharp, FSharp, VisualBasic, Python, Java 
    "algorithm-language": "CSharp" 
} 
""" 

result = json.loads(re.sub("//.*","",s,flags=re.MULTILINE)) 

print(result) 

ができます:

{'environment': 'backtesting', 'algorithm-type-name': 'BasicTemplateAlgorithm', 'algorithm-language': 'CSharp'} 

が適用されます。正規表現をすべての行に追加し、二重スラッシュとそれに続くすべてを削除します。

たぶんラインを解析ステートマシンは//は引用符で囲まれていないが、それは少し複雑な(なんとか)だことを確認する方が良いだろう

0

私は個人的にそれを使用していないが、あなたは持つことができますlookでjsonファイルの解析をサポートするpythonパッケージJSONCommentを見てください。

data=re.sub("//.*?\n","",data) 
data=re.sub("/\\*.*?\\*/","",data) 

をこのデータからすべてのコメントを削除する必要があります。あなたは次のようにコメントを取り出すことができるJsonParser

parser = JsonComment(json) 
parsed_object = parser.loads(jsonString) 
0

の代わりにそれを使用してください。文字列の中に//または/ *があると問題が発生する可能性があります

関連する問題