在函数中使用 JSON 读取字符串



>我调用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;
    }

请注意此方法,它仅在无效字符不包含"[{""{""时才有效!

相关内容

  • 没有找到相关文章

最新更新