javascript - 为什么需要截断 JSON.parse 的 StringContent 响应
问题描述
我编写了 WebApi 过滤器来检测并发问题。在行动 OnActionExecuted 我设置响应内容如下:
actionExecutedContext.Response.Content = new System.Net.Http.StringContent( "'{ \"hasValidationErrors\": true, \"validationErrors\": " + System.Web.Helpers.Json.Encode( validationErrors ) + ", \"concurrencyIssue\": true }'", System.Text.Encoding.UTF8, "application/string" );
当我收到它并写入控制台时,它看起来像在打印屏幕下方
然后,当我尝试这样做时:
JSON.parse(response.data)
我得到错误:
SyntaxError: Unexpected token ' in JSON at position 0
但是当我这样做时
JSON.parse( response.data.substring(1, response.data.length - 1) )
它按预期工作,意味着将字符串转换为 json 数据。
所以我的问题是,为什么我必须截断 response.data?我猜想,从打印屏幕的第一行可以看出,还有额外的引号。但是如何创建我的服务器响应以不将它们放在那里?为什么,当我登录时response.data
(打印屏幕上的第三行),只有撇号,但没有引号?
解决方案
这意味着您的 JSON 无效。尝试为您的响应创建一个模型类。然后解析。
例子 :
public class Response
{
public bool hasValidationErrors;
//public YourType validationErrors;
public bool concurrencyIssue;
}
var obj = new Response();
obj.hasValidationErrors = true;
obj.concurrencyIssue = true;
var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
//Set Your Response
希望这有帮助。
推荐阅读
- mysql - Jenkins docker 上的未知 MySQL 服务器主机
- macos - 使用终端安装 C++ 编写的程序时缺少头文件
- neo4j - 获取最后添加的节点或关系的 ID
- javascript - 如何比较NodeJs中数组中两个值的总和?
- python-3.x - 通过 conda 在 Windows 7 上安装 poppler 时出错
- node.js - requestretry 如何发送带有 json body 的请求?
- c - 编译 .i 或 .ii 文件时忽略 gcc 标志 -include
- javascript - 谷歌图表错误 - 数据表没有列
- php - Jquery 在 Do-While 循环中未按预期工作
- python - 如何将变量从一个函数调用到另一个函数?