在 REST API 中取消转义 json 响应

Posted

技术标签:

【中文标题】在 REST API 中取消转义 json 响应【英文标题】:Unescape json response in REST API 【发布时间】:2021-10-27 22:35:06 【问题描述】:

我有一个用 C# 编写的 REST API。方法 DoQuery 向数据库发送查询,并获取 json 作为响应

public async Task<QueryResponseDto> DoQuery(string request)

  return await _dbConnection.QuerySingleAsync<QueryResponseDto>("select web.json_request('" + request + "') as response;",commandTimeout:600);

...
[HttpPost]
[Route("DoQuery")]
public async Task<string> DoQuery([FromBody] object body)

  var r = await _dataService.DoQuery(JsonSerializer.Serialize(body));
  return r.response;

当我在数据库中运行查询时,我会得到这样的正确 json 答案

[
   
      "contractor":
         "ek2id":"91707d21-50f3-4aa4-8209-e80b963da99d",
         "externalids":[
            
               "externalsource":"SBL",
               "externalid":"1-4OB8C75"
            
         ]
      
   
]

但是当我从 PostMan 运行方法 DoQuery 时,我得到了这样的转义响应

"[\"contractor\":\"ek2id\":\"91707d21-50f3-4aa4-8209-e80b963da99d\",\"externalids\":[\"externalsource\":\"SBL\",\"externalid\":\"1-4OB8C75\"]]"

如何从 REST API 获得正常的非转义响应?

【问题讨论】:

您需要指定编码选项。请看这里:docs.microsoft.com/en-us/dotnet/standard/serialization/… 【参考方案1】:

当您查询数据库时,它会在显示输出时为您格式化 JSON。数据库中的实际值可能是某种 UTF8 或类似编码。

如果转义导致问题,您可以尝试在字符串中存储引号的实际 UTF8 值。但在这两种情况下,您都需要对响应进行编码。

【讨论】:

以上是关于在 REST API 中取消转义 json 响应的主要内容,如果未能解决你的问题,请参考以下文章

在C#中解析Json rest api响应[重复]

从 REST API 中提取 JSON 响应

Rest Template 无法正确解析 json rest api 响应

将大型 JSON 直接从 Java 中的 REST API 响应流保存为文本

从 WordPress REST API JSON 响应中提取图像 url

在动态信封中包装 json 响应 - Rest api