2016-11-17 748 views
0

我想編寫一個腳本,需要在一個參數,它包含了一些JSON數據,和(爲簡單起見)打印東西的字符串。傳遞一個JSON字符串作爲參數傳遞給Python腳本導致報價問題

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匹配雙引號的雙引號的錯誤:

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

如果我切換json雙引號引用單引號,json解析器將不起作用。

如何處理這樣的事情?

回答

1

預期如果你的代碼將工作改變你分配輸入變量的方式。改變這一行:

inp = parser.parse_args() 

inp = args.inputstring 

parse_args()返回argparse.Namespace對象,所以你需要事先檢索該對象的輸入,將它傳遞給解析器。另外,您需要在shell命令中使用雙引號。我得到運行與上述變化的預期輸出:

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

你應該用單引號代替雙引號:

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

嚴格,你應該逃避在JSON內部雙引號:

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

但看你的代碼中,有一對夫婦其他原因可能不起作用:

  1. 你在指定argsinp的值相同,函數調用返回值爲:parser.parse_args()。也許你的意思分配inp = args.inputstring

  2. 已經標記了一個問題,python2但看着你print(...)聲明,看起來你已經爲python3書面

相關問題