【问题标题】:Unexpected character encountered while parsing value, JSON Object解析值时遇到意外字符,JSON 对象
【发布时间】:2016-08-14 22:21:53
【问题描述】:

我有一个如下所示的 JSON 对象:

"field2_body":null,"field3_body":null,"field4_body":null,"h_phrases":[{"h_phrase":"H222"},{"h_phrase":"H411"},{"h_phrase":"H361"},{"h_phrase":"H315"}]

但这只是 JSON 对象的一部分,因为它非常大。

我想要做的是访问 h_phrase 字符串值,但是当我尝试时出现此错误:

错误解析值时遇到意外字符:{。路径“[0].h_phrases”,第 64 行,位置 7。

这是我的代码:

public class PhrasesData
{ 
    [JsonProperty(PropertyName = "h_phrases")]
    public string H_Phrases { get; set; }
}

public async void getPhrasesForSpecificProduct(string productId)
{
    var baseUrl = "http://www.kemtest.com/rest/organisations";
    var specProductUrl = baseUrl + "/" + activeOrganisationId + "/" + "products/" + productId;

    try
    {

        var baseAddress = new Uri(specProductUrl);
        var cookieContainer = new CookieContainer();
        using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
        using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
        {

            validToken = System.Net.WebUtility.UrlEncode(validToken);
            cookieContainer.Add(baseAddress, new Cookie("access_token", string.Format(validToken)));
            var result = client.GetAsync(specProductUrl).Result;

            result.EnsureSuccessStatusCode();

            if (result.IsSuccessStatusCode)
            { 
                var content = await result.Content.ReadAsStringAsync();
                var array = JArray.Parse(content);

                PhrasesData[] myPhrasesData = JsonConvert.DeserializeObject<PhrasesData[]>(array.ToString());

                if (myPhrasesData == null)
                    throw new JsonException();
                string[] H_PhrasesArr = new string[myPhrasesData.Length];
                for (int i = 0; i < myPhrasesData.Length; i++)
                {
                    H_PhrasesArr[i] = myPhrasesData[i].H_Phrases;
                    var H_PhrasesVar = H_PhrasesArr[i];
                    Debug.WriteLine("God Damn PHRASES: " + H_PhrasesVar);
                }

            }
        }
    }catch (Exception ex) { Debug.WriteLine(@"              ERROR {0}", ex.Message); }
}

我的代码有什么问题?

【问题讨论】:

  • 好吧,我可能无法给你答案,但你为什么不先尝试使用任何在线工具将其反序列化为字符串呢?
  • 在http://pro.jsonlint.com 等在线验证器上尝试您的 Json 字符串,看看它是否有效。
  • 您好,感谢您回复我的帖子!我确实将我的 JSON 对象粘贴到 pro.jsonlint.com 中,它是有效的。我在我的代码中尝试了其他方法,但我没有成功...如果你愿意,我可以发布整个 JSON 对象?
  • 我已经解决了这个问题,如果你想知道我是如何解决的,请告诉我,我会发布它:)
  • @AidinGhassemloi 请问您是如何解决的,因为我遇到了同样的问题。谢谢

标签: c# xamarin xamarin.forms xamarin-studio


【解决方案1】:

您的 JSON 字符串无效。您需要用 { 和 } 将其括起来。

在使用 JSON 对象编码之前使用http://jsonlint.com/。

{

    "field2_body": null,
    "field3_body": null,
    "field4_body": null,
    "h_phrases": [{
        "h_phrase": "H222"
    }, {
        "h_phrase": "H411"
    }, {
        "h_phrase": "H361"
    }, {
        "h_phrase": "H315"
    }]

}

【讨论】:

  • 如果是这种情况,它会在第 1 行失败,而不是第 64 行。 OP 说它只是更大 JSON 的 sn-p。
  • 我确实将我的 JSON 对象粘贴到了那个网站,它是有效的。如果你愿意,我可以为你发布整个 JSON 对象?
  • 我已经解决了这个问题伙计们,如果你想知道我是如何解决的,请告诉我,我会发布我的:)
  • 请与我们分享
  • 请发布您的解决方案...@AidinGhassemloi
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
  • 2017-08-30
相关资源
最近更新 更多