2017-10-11 84 views
0
request({ 
     url: "https://xx.xxx.xxx.xxx:9999/run", 
     headers: { 
      'Accept': 'application/x-yaml', 
      'X-Auth-Token': "41b9539436faae8016c305c2f875b31e47a23d93", 
      'Content-type': 'application/json', 
     }, 
     method: "POST", 
     json: true, 
     body: [{ 
      "client": "local", 
      "tgt": "master_minion", 
      "fun": "cmd.script", 
      "kwarg": {"source": "salt://update-diff.py", "args":args}, 
      "username": "salt", 
      "password": "salt", 
      "eauth": "pam" 
     }] 
    } 

我正在向salt-api傳遞一個請求來運行腳本。我需要解析輸出。需要JSON輸出作爲salt-api的回報

輸出示例:

return: 
- master_minion: 
    pid: 28796 
    retcode: 0 
    stderr: '' 
    stdout: " sadfh,smfsdhg\n sfgmsfgmsg\n sfgmsfgmsg\n-dkfadnfklad--->New123\n+dkfadnfklad--->New1232\n\ 
     \ sdfjhs,dfhn\n sdfjhs,dfhn\n sdfjhs,dfhn" 

我可以在JSON這些輸出?

欲陣列中的所有行象下面這樣:

預期輸出: [ 「sadfh,smfsdhg」, 「sfgmsfgmsg」, 「sfgmsfgmsg」, 「 - dkfadnfklad ---> New123」,」 + dkfadnfklad ---> New1232「,」sdfjhs,dfhn「,」sdfjhs,dfhn「,」sdfjhs,dfhn「]

任何建議?由於提前

回答

1

要獲得JSON從鹽API返回的,你只需要改變你的請求頭中接受型:

request({ 
     url: "https://xx.xxx.xxx.xxx:9999/run", 
     headers: { 
      'Accept': 'application/json', 
    ... 

然後你會得到這樣的:

{ 
    "return": [ 
     { 
      "master_minion": { 
       "pid": 28796, 
       "retcode": 0, 
       "stderr": "", 
       "stdout": " sadfh,smfsdhg\n sfgmsfgmsg\n sfgmsfgmsg\n-dkfadnfklad--->New123\n +dkfadn--->New1232\n sdfjhs,dfhn\n sdfjhs,dfhn\n sdfjhs,dfhn" 
      } 
     } 
    ] 

} 

從你的預期產出來看,我認爲這不是你想要的。但是您的預期輸出不是JSON。 JSON是一個像Python字典一樣的基於關鍵值的數據結構。你期望像列表一樣。列表像你期望能JSON的一部分,但需要一個關鍵:

{ "key": ["sadfh,smfsdhg"," sfgmsfgmsg"," sfgmsfgmsg","-dkfadnfklad--->New123","+dkfadnfklad--->New1232"," sdfjhs,dfhn"," sdfjhs,dfhn"," sdfjhs,dfhn"] } 

鹽-API無法從任意的字符串JSON格式化執行腳本的標準輸出(應如何知道\ n是列表項的標記)。您需要通過將update-diff.py腳本中的輸出格式化爲json(在腳本中)來自己完成。即使那樣你也只會得到一個JSON字符串作爲關鍵字標準輸出,但是你可以很容易地提取它並繼續處理。