发布了JSON编码问题

时间:2015-10-13 19:21:52

标签: json url python-3.x encoding

我在Apache上收到了一个带有mod_wsgi的POSTed JSON。我必须将JSON转发到某个API(使用POST),接受API的响应并回复初始POST的来源。
这里是python代码

import requests
import urllib.parse

def application(environ, start_response):
    url = "http://texchange.nowtaxi.ru/api/secret_api_key/"
    query = environ['QUERY_STRING']

    if query == "get":
        url += "tariff/list"
        r = requests.get(url)
        response_headers = [('Content-type', 'application/json')]
    else:
        url += "order/put"
        input_len = int(environ.get('CONTENT_LENGTH', '0'))
        data = environ['wsgi.input'].read(input_len)
        decoded = data.decode('utf-8')
        unquoted = urllib.parse.unquote(decoded)
        print(decoded)  # 'from%5Baddress%5D=%D0%'
        print(unquoted) # 'from[address]=\xd0\xa0'
        r = requests.post(url,data)
        output_len = sum(len(line) for line in r.text)
        response_headers = [('Content-type', 'application/json'),
                            ('Content-Length', str(output_len))]

    status = "200 OK"

    start_response(status, response_headers)

    return [r.text.encode('utf-8')]

实际的JSON开始"{"from":{"address":"Россия
我认为那些\x被称为转义符号,因此我尝试了ast.literal_evalcodecs.getdecoder("unicode_escape"),但它没有帮助。我不能正确地说这个案子,因为我觉得我误解了wtf正在这里发生。也许我必须以某种方式更改发送POST到wsgi脚本的.js文件中的$.post()调用?

UPD:我的兄弟说完全不清楚我需要什么。我会澄清一下。我需要在它的初始形式中获取代表收到的JSON的字符串。使用西里尔字母," s,{} s等。解码收到的字节序列后我得到的是'from%5Baddress%5D=%D0%'。如果我取消引用它,它会转换为'from[address]=\xd0\xa0',但这仍然不是我想要的

0 个答案:

没有答案