2017-10-11 140 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字符串作为关键字标准输出,但是你可以很容易地提取它并继续处理。