代码之家  ›  专栏  ›  技术社区  ›  Anas Laghouaouta

将嵌套的json转换为dict

  •  0
  • Anas Laghouaouta  · 技术社区  · 6 年前

    我试着用Scrapy发送下面的Json

    {
    "version": 1,
    "message_type": 104,
    "message_id": 14,
    "body": [
    {
      "message_type": 104,
      "chat_message": {
        "mssg": "hello",
        "message_type": 1,
        "uid": "15373703487091",
        "from_person_id": "5134266921",
        "to_person_id": "3093543561",
        "read": false
      }
    }
    ],
    "is_background": false
    }
    

    我试过把它硬编码成这样

    self.postRequest = {"version":"1",
                        "message_type":"104",
                        "message_id":"18",
                        "body":"[{'message_type':'104','chat_message':{'mssg':'hello','message_type':'1','uid':'15372201045381','from_person_id':'5134266921','to_person_id':'3093543561','read':'false'}}]",
                            "is_background":"false"}
    
    yield FormRequest(url=response.url   , formdata=self.postRequest, callback=self.parse_data,dont_filter=True, headers=self.params, cookies=self.cookies)
    

    我得到http200状态,并显示一条错误消息:Unknown command server\u Unknown\u action。

    1 回复  |  直到 6 年前
        1
  •  1
  •   nyov    6 年前

    FormRequest 类用于将数据作为 Content-Type: application/x-www-form-urlencoded . 以POST body形式发送JSON可能意味着您真的想发送 Content-Type: application/json .

    为此,请使用普通 Request method 设置为 POST ,和 json.dumps() 你的 self.postRequest Request().body .

    yield Request(url=response.url,
                  method='POST',
                  headers={
                      'Content-Type': 'application/json; charset=UTF-8',
                  },
                  body=json.dumps(self.postRequest),
                  callback=self.parse_data,
                  dont_filter=True,
                  cookies=self.cookies)