2017-02-17 64 views
0

給出一個明顯無效的JSON (它來自谷歌)轉換數組的數組.. JSON在C#

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

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

我想要得到的Wissenschaft值和科學

如果想出一個非常不雅的方式來做到這一點與Json.net通過

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

有沒有更好的,不太詳細的方法?

+0

這是一個由'var res = hc.GetAsync(「https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=ge&dt=t&q=Science」)返回的json。 '所以我不能影響JSON。此外Json.Net解析它沒有問題。 – Nenad

+0

我不知道你的請求返回。但@CodeCaster有正確的...這是無效的JSON ... –

+0

那麼這太糟糕了:-(我不能改變json(來自谷歌)和json.net高興地解析它,所以有沒有更好的方法如果沒有,那麼也許這個Q可以幫助其他人同樣「破碎」的JSON – Nenad

回答

0

首先,這不是有效的JSON對象,但從來沒有要求,因爲您說Json.NET將通過向空的逗號中添加空值來解析它。

因爲這不是有效的對象,它只是一些JSON格式的數組。可能沒有更好的方法,然後將它解析爲動態列表,就像你已經做到的那樣。

如果{ }在開始和結尾以及某些鍵:值格式中,可以按照您可以定義的類將其反序列化爲C#對象。

1

這裏是一個更簡潔的版本,也許有人有一個還保留了頂部陣列 其他值

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]; 

正如你看到的我才最嵌套數組中照顧值,其他值丟失。