2017-02-17 66 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]; 

正如你看到的我才最嵌套数组中照顾值,其他值丢失。