解析值时遇到意外的字符:j。路径'',第0行,第0位

时间:2017-01-12 09:19:05

标签: c# .net json.net

t无法反序列化/删除这个json,我已经尝试了多种不同方法的组合来尝试使这项工作,但似乎没有任何事情......

使用

的代码
WebClient wc = new WebClient();


var json = (JObject)JsonConvert.DeserializeObject(wc.DownloadString("http://services.runescape.com/m=website-data/playerDetails.ws?names=[%22" + Username.Replace(" ", "%20") + "%22]&callback=jQuery000000000000000_0000000000&_=0"));

json试图反序列化......

jQuery000000000000000_0000000000([{"isSuffix":true,"recruiting":false,"name":"Sudo Bash","clan":"Linux Overlord","title":"the Troublesome"}]);

2 个答案:

答案 0 :(得分:0)

您尝试反序列化的不是JSON,而是JSONP(在函数调用中包含JSON)。

从查询字符串中删除此参数:

&callback=jQuery000000000000000_0000000000

你应该选择格式正确的JSON:

var url = "http://services.runescape.com/m=website-data/playerDetails.ws?names=[%22" + Username.Replace(" ", "%20") + "%22]&_=0";
var json = (JObject)JsonConvert.DeserializeObject(wc.DownloadString(url));

答案 1 :(得分:0)

在Json规范中,您可以看到[表示json对象的开始数组,而{表示新json对象的开始。

你的json字符串以[开头,因此它可以包含更多的json对象(因为它是一个数组,它包含jQuery000000000000000_0000000000(这是你的查询字符串参数。要摆脱查询字符串垃圾你应该找出那个垃圾的方案,然后处理json对象我建议你使用List<JObject>方法将你的json字符串反序列化为JsonConvert.DeserializeObject<T>()如果你的json字符串以[开头(如果以{开头,则使用标准类型);

示例:

string url = // url from @Darin Dimitrov answer
string response = wc.DownloadString(url);
// getting rid of the garbage 
response = response.Substring(response.IndexOf('(') + 1);
response = response.Substring(0, response.Length - 1);
// should get rid of "jQuery000000000000000_0000000000(" and last occurence of ")"
JObject result = null;
if(response.StartsWith('['))
{
    result = JsonConvert.DeserializeObject<List<JObject>>(response)[0];
}
else 
{
    result = JsonConvert.DeserializeObject<JObject>(response);
}