JsonArray.Parse(...)错误(JsonArray.Parse(…) error)

2019-06-25 08:43发布

我正在开发一个新闻应用程序为Windows 8(在C#,XAML)。 不幸的是我下载一个JSON进纸(带验证后遇到了一个奇怪的错误http://jsonlint.com/ )异步。 下载成功,然后我想分析的结果: var items = Windows.Data.JsonArray.Parse(result);

当我运行的代码中,我得到以下错误:

Invalid character at position 0.Invalid JSON string.

Json.JsonArray是微软一个新的图书馆。 我也试过Newtonsoft的JSON-库同样的错误。 我究竟做错了什么?

这是完整的代码:

// Retrieve recipe data from Azure
var client = new HttpClient();
client.MaxResponseContentBufferSize = 1024*1024; // Read up to 1 MB of data
var response = await client.GetAsync(new Uri("http://contosorecipes8.blob.core.windows.net/AzureRecipes"));
var result = await response.Content.ReadAsStringAsync();

// Parse the JSON recipe data
var recipes = JsonArray.Parse(result.Substring(1, result.Length - 1));

此代码段是从微软动手实验室(Contoso的食谱)。 我也试了一下没有源代码中的“[”和“]”(无效果)...

谢谢!

Answer 1:

我可以一个小的修改后运行代码。 在UTF8字符串的字节顺序标记似乎引发一个问题,从Windows.Data.Json JsonArray.Parse()。

来解决这个问题,而无需使用附加的编码的一种方式是后ReadAsStringAsync(),例如,以取代BOM字符

result = result.Replace('\xfeff', ' ');

或更好

if (result.Length > 1 && result[0] == '\xfeff'){
    result = result.Remove(0, 1);
}


Answer 2:

我能精细下载并解析结果,使用这个:

static async Task<JsonValue> DownloadJsonAsync(string url)
{
    var client = new HttpClient();
    client.MaxResponseContentBufferSize = 1024 * 1024;
    var data = await client.GetByteArrayAsync(new Uri(url));
    var encoding = Encoding.UTF8;
    var preamble = encoding.GetPreamble();
    var content = encoding.GetString(data, preamble.Length, data.Length - preamble.Length);
    var result = JsonValue.Parse(content);
    return result;
}

在响应中的BOM未正确处理显然这导致在具有'\xfeff'在一开始杀解析器字符。 剥离序言和解析读取的罚款。 否则,解析它,是抛出一个FormatException与消息: Encountered unexpected character 'ï'.



文章来源: JsonArray.Parse(…) error