2016-11-25 5 views
0

現在、コマンドライン引数を使用してPythonが受け入れるjson入力をインポートする作業をしていますが、JSONに異なる値をリストに保存しようとしています。私は以下のコードに問題があり、以下のコードとエラーの両方を添付しています。どんな助けでも大歓迎です。Pythonのコマンドラインからjsonをインポートできません

import sys 
import json 
def lookup1(): 
    jsonData = json.loads(sys.argv[1]) 
    print jsonData 
    jsonList = [jsonData['proxy'],jsonData['OS']] 
    print jsonList 

lookup1() 

エラーは以下のとおりである:

$ python dynamicMapper.py '{'proxy':1,'OS':2}' 
Traceback (most recent call last): 
    File "dynamicMapper.py", line 9, in <module> 
    lookup1() 
    File "dynamicMapper.py", line 4, in lookup1 
    jsonData = json.loads(sys.argv[1]) 
    File "/usr/lib/python2.7/json/__init__.py", line 338, in loads 
    return _default_decoder.decode(s) 
    File "/usr/lib/python2.7/json/decoder.py", line 366, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode 
    obj, end = self.scan_once(s, idx) 
ValueError: Expecting property name: line 1 column 2 (char 1) 

私が与えるcommadlineのargunetが、私はこのエラーを引き起こし、私のアプローチが適切かどうされているものを見つけることができないのですpython dynamicMapper.py '{'proxy':1,'OS':2}' です。

答えて

2

スクリプトが正常に動作している、あなただけの正しい方法、それを呼び出す必要があります:JSONで

python dynamicMapper.py '{"proxy":1,"OS":2}' 
{u'OS': 2, u'proxy': 1} 
[1, 2] 

文字列は二重引用符の代わりに単一引用符で引用されています。シェルが単一の引数であることを理解できるように、スクリプトに渡された文字列も引用する必要があります。

+0

ああ、ありがとう!何が間違っていたかは、私がそれを呼び出す方法だったと思います。私は 'python dynamicMapper.py {'proxy':1、 'OS':2}'を使っていました。私は一重引用符と二重引用符は交換可能でしたが。たぶんDICではないでしょう、そうですか? – lordlabakdas

+0

@lordlabakdasあなたはスクリプトにdictを渡すのではなく、スクリプトがJSON.loadsで解析するJSONを含む文字列を渡します。 – niemmi

関連する問題