【问题标题】:Python Hug REST API consumed in .NET, JSON looks weird.NET 中使用的 Python Hug REST API,JSON 看起来很奇怪
【发布时间】:2019-05-09 17:24:56
【问题描述】:

从 .net 使用 Hug REST 端点时,JSON 具有嵌入字符。下面发布了一个完整的失败示例。非常感谢任何帮助。

Python

@hug.post('/test')
def test(response, body=None):
    input = body.get('input')
    print('INSIDE TEST ' + input)

    if input:
        dict = {"lastname":"Jordan"}
        dict["firstname"] = input
        return json.dumps(dict, sort_keys=True, default=str)

.NET(只能使用.net 3.5)

private static object GetParsedData(string data)
{
    var posturl = "http://localhost:8000/test"; 
    try
    {
        using (var client = new WebClient())
        {
            // upload values is the POST verb
            var values = new NameValueCollection()
                         {
                             { "input", data },
                         };
            var response = client.UploadValues(posturl, values);
            var responseString = Encoding.UTF8.GetString(response);
            var settings = new JsonSerializerSettings
                           {
                               NullValueHandling = NullValueHandling.Ignore,
                               MissingMemberHandling = MissingMemberHandling.Ignore
                           };
            JObject rss = JObject.Parse(responseString);
            Console.WriteLine((string)rss["lastname"]);
        }
    }
    catch (WebException ex)
    {
        if (ex.Response is HttpWebResponse)
        {
            var code = ((HttpWebResponse)ex.Response).StatusCode;
            var desc = ((HttpWebResponse)ex.Response).StatusDescription;
        }
        //_logger.Error(ex.Message);
    }
    return false;
}

responseString 看起来像这样:

"\"{\\\"firstname\\\": \\\"Mike\\\", \\\"lastname\\\": \\\"Jordan\\\"}\""

JObject.Parse 抛出错误:

Newtonsoft.Json.JsonReaderException: 
'Error reading JObject from JsonReader. Current JsonReader item is not an object: String. Path '', line 1, position 53.

解决方法 - 如果我对 responseString JObject 正确解析做这样可怕的事情:

str = str.Replace("\\", "");
str = str.Substring(1, len - 2);

怎么了?

【问题讨论】:

  • 看起来是双重编码的——如果视图函数只返回一个dict会发生什么?
  • snakecharmerb 你太棒了!非常感谢。不能告诉你我在这上面浪费了多少时间——呃。是的,显然 Hug 自动将返回值序列化为默认输出格式,这很酷。请将此作为答案发布,我会将其标记为已回答。再次感谢!!从好的方面来说,我发布了一个连接两个世界的迷你教程;)
  • 你从 python 的响应被序列化了两次
  • 谢谢库纳尔。你是对的。

标签: python .net json python-3.x hug


【解决方案1】:

默认的拥抱output format是json;不需要在返回值上调用json.dumps,Hub 会自动执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2015-03-20
    • 2011-07-19
    相关资源
    最近更新 更多