簡體   English   中英

使用空格傳遞 Python JSON 參數

[英]Passing Python JSON argument with whitespace

我試圖在命令提示符下將 JSON 作為參數傳遞給 python 腳本。 如果 JSON 中的元素在值中沒有空格,則它有效,但如果有空格,則它不起作用。

這是腳本

import json, sys, traceback
    if(len(sys.argv)>1):
    print(sys.argv[1])
    jsonInput = json.loads(sys.argv[1]);
    print(jsonInput['name'])
    print(jsonInput['kingdom'])
    print(jsonInput['slogan'])

在 Power Shell 中將 JSON 作為參數傳遞到下面。 我在值中有空格,例如 Jon Snow

python C:\Users\user1\Desktop\myTest.py '{\"name\":\"Jon Snow\",\"kingdom\":\"Winterfell\",\"slogan\":\"King in the North\"}'

輸出:

python : Traceback (most recent call last):
At line:1 char:1
+ python C:\Users\kiran.patil\Desktop\myTest.py '{\"name\":\"Jon Snow\" ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Traceback (most recent call last)::String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
  File "C:\Users\User\Desktop\myTest.py", line 5, in <module>
    jsonInput = json.loads(sys.argv[1]);
  File "C:\Program Files\Python38\lib\json\__init__.py", line 357, in loads
    return _default_decoder.decode(s)
  File "C:\Program Files\Python38\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Program Files\Python38\lib\json\decoder.py", line 353, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Unterminated string starting at: line 1 column 9 (char 8)

請任何建議來修復它。

如果您使用\\"則表示封閉引號也是雙引號。在 Windows 上,封閉單引號不起作用,因此 2 個選項是

# Linux + Windows
python script.py "{\"name\":\"Jon Snow\",\"kingdom\":\"Winterfell\",\"slogan\":\"King in theNorth\"}"

# Linux only
python script.py '{"name":"Jon Snow","kingdom":"Winterfell","slogan":"King in theNorth"}'

Powershell 案例

python script.py '{""name"":""Jon Snow"",""kingdom"":""Winterfell"",""slogan"":""King in theNorth""}'

PowerShell 中

  • 實際上,您嘗試將嵌入的"字符轉義為\\"以調用外部程序(例如 Python)從根本上沒有任何錯誤盡管它們被包含在引號字符串'...' )中:

    • 由於Windows PowerShell 中的一個額外錯誤(除了下面討論的基本錯誤之外),該錯誤已在PowerShell [Core] v6+ 中修復,帶有\\"轉義的字符串僅在包含至少一個空格字符時才有效。

    • 換句話說:在PowerShell [Core] v6+ 中,您的命令將按原樣運行 Windows PowerShell 中,它只有在您的字符串至少包含一個空格字符時才有效

    • 因為在這個特定背景下(僅!) \\"""可以互換和使用""還與在Windows PowerShell中節省空間更少的字符串, "" -escaping,如圖azro的有用的答案,是更強大的選擇;需要注意的是,Windows 上的大多數但並非所有CLI""識別為轉義的" char.",而那些不識別\\" CLI。

# OK even in Windows PowerShell, due to the string containing spaces.
# "" instead of \" works too and avoids the need for spaces in Windows PowerShell
#  - but neither should be necessary (see below).
python myTest.py '{\"name\": \"Jon Snow\", \"kingdom\": \"Winterfell\", \"slogan\": \"King in the North\"}'
  • 但是,應該有問題,因為您不必在'...'分隔的字符串文字中轉義"字符。這是PowerShell 中逐字字符串文字

    • 其實,並不需要,如果你調用PowerShell的本地命令去做; 例如:
      ConvertFrom-Json '{ "foo": "bar" }'工作得很好。

    • 由於長期存在的錯誤,您在調用外部程序確實必須這樣做,不幸的是- 尚未修復以免破壞向后兼容性 - 有關背景信息和可能的未來修復,請參閱此答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM