>我调用URL以获取数据(URL不是我的(响应是:
string data = w.DownloadString(url);
// response "MyCallBack([{"symbol":"USDCHF"},{"symbol":"GBPUSD"}])"
我怎样才能得到这个值,因为JSON内部的函数("MyCallBack"(当我尝试解析失败时(错误是:"解析值时遇到意外字符:A. 路径'',第 0 行,位置 0。
编辑
URL 看起来像 xxx.xxx.com?callback=MyCallBack当我从 URL "xxx.xxx.com"中删除回调时答案还在括号里( JSON (
当我尝试解析时
var json1 = new JavaScriptSerializer().DeserializeObject(data);//or
var json2 = new JavaScriptSerializer().Deserialize<dynamic>(data);
失败并出现错误"无效的 JSON 原语:"。
当我这样做时
json = json.Substring(1, json.Length - 2);
var jsona = new JavaScriptSerializer().DeserializeObject(json);
我删除括号的第一个和最后一个([{值,值]}(我得到[{值},{值}]并且有效(但我不确定这是这样做的方法(
问题是,页面应该返回有效的 JSON,而他们没有。因此,您必须从响应中删除所有无效字符。
JSON 字符串每次都以[{
或{"
开头,以便您可以确定 JSON 字符串从哪个索引开始以及何时结束。
我已经编写了非常易于理解的方法:
private string FilterJsonResponse(string responseWithJson)
{
var indexFirstJsonArray = responseWithJson.IndexOf("[{", StringComparison.Ordinal);
var indexFirstJsonElement = responseWithJson.IndexOf("{"", StringComparison.Ordinal);
string filteredJson;
if (indexFirstJsonArray < indexFirstJsonElement && indexFirstJsonArray != -1)
{
filteredJson = responseWithJson.Remove(0, indexFirstJsonArray);
var indexLastJsonArray = filteredJson.IndexOf("}]", StringComparison.Ordinal) + 2;
filteredJson = filteredJson.Remove(indexLastJsonArray, filteredJson.Length - indexLastJsonArray);
}
else
{
filteredJson = responseWithJson.Remove(0, indexFirstJsonElement);
var indexLastJsonElement = filteredJson.IndexOf(""}", StringComparison.Ordinal) + 2;
filteredJson = filteredJson.Remove(indexLastJsonElement, filteredJson.Length - indexLastJsonElement);
}
return filteredJson;
}
请注意此方法,它仅在无效字符不包含"[{"
或"{""
时才有效!