2017-02-17 4 views
0

ein scheinbar ungültig json gegeben (die von Google kommt)ein Array von Array konvertieren .. json in C#

https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=de&dt=t&q=Science

von

[[["Wissenschaft","Science",,,2]],,"en"] 

mag ich die Wissenschaft, die Werte erhalten und Wissenschaft

wenn herausgefunden eine sehr unelegante Art, es mit Json.net über

zu tun
string h = "[[[\"Wissenschaft\",\"Science\",,,2]],,\"en\"] "; 
var obj = JsonConvert.DeserializeObject<List<dynamic>>(h); 
JArray arr1 = obj[0]; 
var arr2 = arr1.First; 
var x = arr2.First.Next; 
string s = x.ToString(); 

gibt es eine bessere, weniger wortreiche Art?

+0

Dies ist ein JSON, der von 'var res = hc.GetAsync (" https://translate.googleapis.com/translate_a/single?client=gtx&sl=de&tl=ge&dt=t&q=Science ") zurückgegeben wird. 'So kann ich den JSON nicht beeinflussen. Auch Json.Net analysiert es ohne Probleme. – Nenad

+0

Ich habe keine Ahnung, was Ihre Anfrage zurückgibt. aber @CodeCaster hat Recht ... Das ist kein gültiger JSON ... –

+0

Nun, das ist schade :-(Ich kann den JSON nicht ändern (kommt von Google) und json.net analysiert es gerne selbst. Also gibt es einen besseren Weg um die Werte zu bekommen? Wenn nicht, dann hilft dieses Q vielleicht jemand anderem mit gleich "kaputtem" json. – Nenad

Antwort

0

Zunächst ist dies kein gültiges JSON-Objekt, aber es wird ignoriert, wie Sie gesagt haben Json.NET analysiert es durch Hinzufügen von Nullwerten in leere Kommas.

Da dies kein gültiges Objekt ist und es sich nur um ein Array in einem JSON-Format handelt. Es wird wahrscheinlich keinen besseren Weg geben, als ihn bereits in die dynamische Liste zu parsen.

Im Fall von am Anfang und Ende und einige Schlüssel: Werte Format können Sie es in C# -Objekt nach Klasse, die Sie definieren können.

1

Hier eine kurze Version ist, hat vielleicht jemand eine, die auch

string h = "[[[\"Wissenschaft\",\"Science\",,,2]],,\"en\"]"; 
JsonSerializerSettings settings = new JsonSerializerSettings(); 
    settings.Error = (serializer, err) => 
    { 
     err.ErrorContext.Handled = true; 
     //ignore all errors 
    }; 
var obj = JsonConvert.DeserializeObject<List<List<List<dynamic>>>>(h,settings); 
string strWissenschaft = obj[0][0][0]; 
string strScience = obj[0][0][1]; 

die anderen Werte aus dem oberen Array behält Wie Sie i in den meist verschachtelten Array für die Werte nur sehen kümmern, die andere Werte sind verloren.

Verwandte Themen