invalid json
invalid json 请求接口的时候报错invalid json
Error parsing Infinity value. Path
双引号和换行导致 JSON 格式错误,特别是岗位描述中包含 "、换行符、\ 等字符时,直接拼接成 JSON 字符串会出错。
var des = $"根据我的简历分析是否应该投递该岗位,只需要回答是或者否,然后给出20字以内的理由 回答格式【是,原因:不符合简历技能】,我的简历信息是{aipromot}岗位描述是{postDescription}";
var client = new RestClient("api.binjie.fun/api/generateStream?refer__1360=eqfx9iqDu70QGkDlEmqYGKDtK%3DKqYwrIIpD");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("accept", "application/json, text/plain, */*");
request.AddHeader("accept-language", "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/json");
request.AddHeader("origin", "https://chat18.aichatos58.com");
request.AddHeader("pragma", "no-cache");
request.AddHeader("priority", "u=1, i");
request.AddHeader("referer", "https://chat18.aichatos58.com/");
request.AddHeader("sec-ch-ua", "\"Microsoft Edge\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"");
request.AddHeader("sec-ch-ua-mobile", "?0");
request.AddHeader("sec-ch-ua-platform", "\"Windows\"");
request.AddHeader("sec-fetch-dest", "empty");
request.AddHeader("sec-fetch-mode", "cors");
request.AddHeader("sec-fetch-site", "cross-site");
client.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0";
request.AddHeader("Cookie", "acw_tc=7754489517486843375693740efbce2738a52db03adbe8d8a2ae052f09; cdn_sec_tc=7754489517486843375693740efbce2738a52db03adbe8d8a2ae052f09");
var body = string.Format(
"{{\"prompt\":\"{0}\",\"userId\":\"#/chat/1748682523477\",\"network\":true,\"system\":\"\",\"withoutContext\":false,\"stream\":false}}",
des
);
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
//Console.WriteLine(response.Content);
var json = JObject.Parse(response.Content);
return json; 一直报错prompt的json不对 双引号可能会导致换行出问题,是不是应该用三引号
原因
JSON 中包含了 非法的 JSON 值
没有正确转义的字符串(特别是嵌套 JSON)
确保 prompt 是纯文本,不是 JSON 字符串
是的,当 JSON 数据中包含换行符或特殊字符时,直接使用字符串拼接容易导致格式错误。以下是修复后的代码,使用 JObject 构建 JSON 请求体,避免手动拼接字符串的问题:
修复后的代码(推荐方案)
public JObject GetAiJudgment(string aipromot, string postDescription)
{
var client = new RestClient("https://api.binjie.fun/api/generateStream?refer__1360=eqfx9iqDu70QGkDlEmqYGKDtK%3DKqYwrIIpD");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
// 设置请求头
request.AddHeader("accept", "application/json");
request.AddHeader("content-type", "application/json");
request.AddHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
// 使用 JObject 构建请求体(避免手动拼接 JSON)
var prompt = $"根据我的简历分析是否应该投递该岗位,只需要回答是或者否,然后给出20字以内的理由 回答格式【是,原因:不符合简历技能】,我的简历信息是{aipromot}岗位描述是{postDescription}";
var requestBody = new JObject
{
["prompt"] = prompt,
["userId"] = "#/chat/1748682523477",
["network"] = true,
["system"] = "",
["withoutContext"] = false,
["stream"] = false
};
request.AddJsonBody(requestBody.ToString());
try
{
IRestResponse response = client.Execute(request);
if (!response.IsSuccessful)
{
throw new Exception($"API请求失败: {response.StatusCode}");
}
return JObject.Parse(response.Content);
}
catch (Exception ex)
{
return new JObject
{
["error"] = ex.Message
};
}
}
关键改进点:
安全的 JSON 构建方式
- 使用
JObject代替字符串拼接 - 自动处理特殊字符和换行符
- 使用
简化请求头
- 移除非必要的请求头
- 保留核心的
content-type和user-agent
错误处理
- 添加 try-catch 捕获异常
- 返回包含错误信息的 JSON
使用方法
var result = GetAiJudgment("3年C#经验", "需要.NET开发工程师");
if (!result.ContainsKey("error"))
{
Console.WriteLine(result["response"]?.ToString());
}
替代方案(如果必须使用字符串)
如果因某些原因必须使用字符串拼接,可以使用 @ 原样字符串配合 JsonConvert:
var rawJson = @"
{
""prompt"": """ + prompt.Replace("\"", "\\\"") + @""",
""userId"": ""#/chat/1748682523477"",
""network"": true,
""system"": """",
""withoutContext"": false,
""stream"": false
}";
request.AddParameter("application/json", rawJson, ParameterType.RequestBody);
常见问题排查
提示词中的双引号问题:
- 如果
aipromot或postDescription可能包含双引号,需要转义:
var prompt = $"我的简历信息是{aipromot.Replace("\"", "\\\"")}";- 如果
换行符问题:
- 在 JSON 中换行符应表示为
\n
prompt = prompt.Replace("\r\n", "\\n");- 在 JSON 中换行符应表示为
调试建议:
Console.WriteLine(requestBody.ToString()); // 检查输出的JSON格式是否正确
这种实现方式更健壮,能有效避免 JSON 格式错误问题。