【问题标题】:Handling requests response处理请求响应
【发布时间】:2021-12-02 04:04:28
【问题描述】:

我正在连接到一个 REST 服务并且我收到了该格式的响应

{
"Outputs": {
    "Actual": [
        "2017-08-29T14:37:47.137",
        "2017-08-30T13:07:09.563",
        "2017-08-30T14:41:29.023"
    ],
    "Start": [
        "2017-08-29T14:36:12.42",
        "2017-08-30T12:59:53.05",
        "2017-08-30T14:40:45.34"
    ],
    "NumScrapsList": [
        0,
        3,
        ...
        

但我想以那种形式拥有它

{
"Outputs":[
    {   
        "NumScrapsList":0,
        "Actual":"2017-08-29T14:37:47.137",
        "Start":"08-29T14:36:12.42"
    },
    {
        "NumScrapsList":3,
        "Actual":"2017-08-30T13:07:09.563",
        "Start":"2017-08-30T12:59:53.05"
    }
]

}

我对 Python 代码和 JSON 格式很陌生,我不知道我不知道从哪里开始“重新映射”结果。你能把我引向正确的方向吗?

这是我的一小段代码:

with requests.post(url, headers=headers, data=data, stream=True) as r:
r.raise_for_status()
with open('outfile.json', 'wb') as f_out:
    for chunk in r.iter_content(chunk_size=8192): 
        f_out.write(chunk)

谢谢

【问题讨论】:

    标签: python json pandas python-requests dictionary-comprehension


    【解决方案1】:

    这是一种适用于您的用例的通用方法:

    from pprint import pprint
    
    resp = {
        "Outputs": {
            "Actual": [
                "2017-08-29T14:37:47.137",
                "2017-08-30T13:07:09.563",
                "2017-08-30T14:41:29.023"
            ],
            "Start": [
                "2017-08-29T14:36:12.42",
                "2017-08-30T12:59:53.05",
                "2017-08-30T14:40:45.34"
            ],
            "NumScrapsList": [
                0,
                3,
                1,
            ]
        }
    }
    
    outputs = [dict(zip(resp['Outputs'].keys(), e))
               for e in zip(*resp['Outputs'].values())]
    
    pprint(outputs)
    

    结果:

    [{'Actual': '2017-08-29T14:37:47.137',
      'NumScrapsList': 0,
      'Start': '2017-08-29T14:36:12.42'},
     {'Actual': '2017-08-30T13:07:09.563',
      'NumScrapsList': 3,
      'Start': '2017-08-30T12:59:53.05'},
     {'Actual': '2017-08-30T14:41:29.023',
      'NumScrapsList': 1,
      'Start': '2017-08-30T14:40:45.34'}]
    

    【讨论】:

      【解决方案2】:

      也许你可以试试这样的:

      response = {"Outputs": {
                        "Actual": [
                              "2017-08-29T14:37:47.137",
                              "2017-08-30T13:07:09.563",
                              "2017-08-30T14:41:29.023"
                           ],
                        "Start": [
                              "2017-08-29T14:36:12.42",
                              "2017-08-30T12:59:53.05",
                              "2017-08-30T14:40:45.34"
                           ],
                        "NumScrapsList": [0, 3, 4]
                       }
                   }
      
      temp = response["Outputs"]
      final = {"Outputs": []}
      
      for i in range(len(temp["NumScrapsList"])):
          entry = {"NumScrapsList": temp["NumScrapsList"][i],
                   "Actual": temp["Actual"][i],
                   "Start": temp["Start"][i]
                  }
          final["Outputs"].append(entry)
      
      print(final)
      

      输出:

      {   'Outputs': [   {   'NumScrapsList': 0,
                             'Actual': '2017-08-29T14:37:47.137',
                             'Start': '2017-08-29T14:36:12.42'
                         },
                         {   'NumScrapsList': 3,
                             'Actual': '2017-08-30T13:07:09.563',
                             'Start': '2017-08-30T12:59:53.05'
                         },
                         {   
                             'NumScrapsList': 4,
                             'Actual': '2017-08-30T14:41:29.023',
                             'Start': '2017-08-30T14:40:45.34'
                         }
                     ]
      }
      

      【讨论】:

        猜你喜欢
        • 2011-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-17
        • 2012-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多