2016-08-14 1 views
0

Ich habe ein JSON-Objekt, das wie folgt aussieht:Unerwartetes Zeichen auf beim Wert analysiert, JSON-Objekt

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

Aber das ist nur ein Teil des JSON-Objekts, weil es sehr groß ist.

Was ich tun möchte, ist die h_phrase String-Werte zuzugreifen, aber wenn ich bekomme ich versuchen, diesen Fehler:

ERROR Unexpected character encountered while parsing value: {. Path '[0].h_phrases', line 64, position 7.

Und dies ist mein Code:

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); } 
} 

Was ist das Problem mit meinem Code?

+3

Nun, ich könnte Ihnen nicht die Antwort geben, aber warum versuchen Sie es nicht die Zeichenfolge mit einem Online-Tool zuerst zu deserialisieren? – BraveHeart

+4

Versuchen Sie Ihre Json-Zeichenfolge auf einem Online-Validator wie "http: // pro.jsonlint.com" und sehen Sie, ob es gültig ist. – SushiHangover

+0

Hey, danke für die Antwort auf meine Post Jungs! Ich habe mein JSON-Objekt in http://pro.jsonlint.com eingefügt und es war gültig. Ich habe andere Methoden in meinem Code versucht, aber ich bin nicht gelungen ... Wenn Sie möchten, kann ich das ganze JSON-Objekt veröffentlichen? –

Antwort

2

Ihre JSON-Zeichenfolge ist ungültig. Sie müssen es mit {und} einschließen.

Verwenden Sie http://jsonlint.com/ vor dem Codieren mit JSON-Objekten.

{ 

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

} 
+0

Es würde auf Linie 1, nicht 64 fehlschlagen, wenn das der Fall wäre. OP sagt, es ist nur Schnipsel von größerem JSON. – Crowcoder

+0

Ich habe mein JSON-Objekt in diese Website eingefügt und es war gültig. Wenn du willst, kann ich das ganze JSON-Objekt für dich veröffentlichen? –

+0

Ich habe dieses Problem Jungs gelöst, wenn Sie wissen wollen, wie ich es gelöst habe, sagen Sie es mir einfach und ich werde meine es :) –

Verwandte Themen