2016-11-17 13 views
0

私は、単一の引数、いくつかのjsonデータを含む文字列を書くスクリプトを作成したい(簡単にするために)何かを印刷します。Pythonスクリプトの引数としてjson文字列を渡すと、引用符の問題が発生する

python myscript.py -i "{ "Employees": "name name"}" 
Unrecognized arguments Employees... 

私は切り替えた場合:私は、コマンドラインからこれを実行すると、私はので、私はJSONで二重引用符に一致終わる文字列をラップするために使用し、二重引用符のエラーを取得する

import argparse 
import json 

parser = argparse.ArgumentParser(description='json load and print') 
parser.add_argument('-i','--inputstring', help='Input String in JSON format',required=True) 
args = parser.parse_args() 

inp = parser.parse_args() 

data = json.loads(inp) 

print(data['Employees']) 

json二重引用符を一重引用符にすると、json構文解析プログラムは機能しません。

どうすればこのように処理できますか?

答えて

1

のために書いたようにあなた場合に予想されるようあなたのコードは動作します見えますinp = args.inputstring

  • を割り当てるためのもの入力変数の割り当て方法を変更します。この行を変更します。

    inp = parser.parse_args() 
    

    argparse.Namespaceオブジェクトを返します

    inp = args.inputstring 
    

    parse_args()

    に、あなたはパーサに渡す前に、そのオブジェクトから入力を取得する必要がありますので。さらに、シェルコマンドで二重引用符をエスケープする必要があります。上記の変更を行って期待される出力を得るには、

    python myscript.py -i "{ \"Employees\": \"name name\"}" 
    
  • 0

    あなたは、単一引用符と二重引用符を置き換える必要があります。厳密にあなたはJSONで内部二重引用符エスケープしなければならない

    python myscript.py -i "{ 'Employees': 'name name'}" 
    
    1

    python myscript.py -i "{ \"Employees\": \"name name\"}" 
    

    しかし、あなたのコードを見ての、のカップルがありますそれ以外の理由で動作しない可能性があります。

    1. argsinp同じ値、関数呼び出しの戻り値:parser.parse_args()。おそらく、あなたはpython2として質問をタグ付けしましたが、あなたのprint(...)の文を見て、それはあなたがのpython3

    関連する問題