2015-03-19 3 views
1

Я работаю с API, который возвращает JSON.C# - JObject.Parse - Invalid JSON

У меня есть метод, который вызывает api и анализирует ответ JSON для нужных узлов.

До сих пор все работало нормально, за исключением того, что последний ответ JSON кажется неправильным.

Другие ответы возвращаются как:

{ 
    "Keyword":"\"marhope\"", 
    "TermKey":null, 
    "Customers":[ 
     { 
     "Memberships":[ ], 
     "CompanyId":0, 
     "ObjectId":112974, 
     "ObjectType":"Customer", 

     } 
    ] 
} 

Я использую JObject.Parse, чтобы вернуть соответствующие узлы по имени.

Последний ответ JSON возвращается как:

{ 
    [ 
     { 
     "AnimalId":9079117, 
     "SpeciesCode":"XX", 
     } 
    ] 
} 

Как вы можете видеть, что нет «имя», и JSON немного недействительным.

Как я могу разобрать это. Для первого примера я использовал код ниже, но теперь, когда JSON не имеет «имени», я не знаю, как подойти к этому, мысли?

JObject results = JObject.Parse(csr.SearchCustomer(1, 1, 870, term)); 
foreach (var resp in results["Customers"]) 
{ 
    string obj = (string)resp["CompanyId"]; 
} 
+6

Ну, API не возвращает действительный JSON. Я предлагаю вам поговорить с разработчиками и заставить его вернуть действительный JSON ... –

ответ

3

Jon Skeet правильный, второй JSON недействителен: вы не можете иметь массив непосредственно внутри объекта без имени свойства. Лучший способ действий - заставить разработчиков API исправить JSON. Однако, если вы ищете быстрый и грязный способ обхода, вы можете удалить первую и последнюю скобки из недействительного JSON, а затем проанализировать его как массив, используя JArray.Parse.

string json = @"{ 
    [ 
     { 
     ""AnimalId"":9079117, 
     ""SpeciesCode"":""XX"", 
     } 
    ] 
}"; 

json = json.Substring(1, json.Length - 2); 
JArray array = JArray.Parse(json); 
foreach (JObject item in array.Children<JObject>()) 
{ 
    Console.WriteLine("AnimalId: " + item["AnimalId"]); 
    Console.WriteLine("SpeciesCode: " + item["SpeciesCode"]); 
} 
+0

Спасибо за работу, мне нужно было что-то быстро, я приступлю к разговорам с разработчиками, просто не могу дождаться их исправления. – Mark

+0

Нет проблем; Рад, что смог помочь. –

Смежные вопросы