2016-11-29 1 views
1

Im борется с объектом json.Проблемы с итерацией в объекте json

Я создаю объект (RO) со следующим кодом и работает нормально.

string reply = @"" + client.UploadString(url, "POST", LS_json); 
RootObject RO = new RootObject(); 
RO = JsonConvert.DeserializeObject<RootObject>(reply); 

RO теперь содержит все данные, которые я получил через поиск json.

Теперь, когда перебор объекта в цикле, перебирать один больше, чем (RO) содержит:

cnt_V = 0; 
foreach (object obj_attributtertype in RO.hits.hits[0]._source.Biz.Rel[cnt_I].org[cnt_III].mem[cnt_IV].attributter[cnt_V].type) 
{ 
    if (Convert.ToString(RO.hits.hits[0]._source.Biz.Rel[cnt_I].mem[cnt_III].xsData[cnt_IV].attributes[cnt_V].type) == "KEY_VALUES") 
    { 
    LS_ande = "" + Convert.ToString(RO.hits.hits[0]._source.Biz.Rel[cnt_I].mem[cnt_III].xsData[cnt_IV].attributes[cnt_V].values[0].value); 
    } 
    cnt_V++; 
} 

Дела в том, что, когда cnt_V == 4 и «точка» к последней записи атрибутов [cnt_V] то LS_ande заполняется как предполагается (== "KEY_VALUES").

Но тогда foreach снова итерации (cnt_V == 5), здесь нет проблем, но когда ему назначается LS_ande, тогда он сбрасывает (из cource, потому что нет записи с данными для cnt_V == 5).

Я не понимаю, что случилось. Пожалуйста, будьте осторожны со мной и не стесняйтесь спрашивать дополнительную информацию. Спасибо заранее.

+0

Итерация через длинный путь, как RO.hits.hits [0] ._ source.Vrvirksomhed.deltagerRelation [cnt_I] .organisationer [cnt_III] [.medlemsData cnt_IV] .attributter [cnt_V] .type вызывает ошибки, если один из средних объектов имеет значение null. Вы должны проверить, что ни один из средних объектов не равен нулю. – jdweng

+0

@jdweng Уже пробовал, что. Он не сделал этого трюка: if (RO.hits.hits [0] ._ source.Biz.Rel [cnt_I] .org [cnt_III] .mem [cnt_IV] .attributes [cnt_V] .values ​​[0]. value! = null) { LS_ande = "" + Convert.ToString (RO.hits.hits [0] ._ source.Biz.Rel [cnt_I] .org [cnt_III] .mem [cnt_IV] .attributes [cnt_V]. значения [0] .value); } –

+1

'RootObject RO = new RootObject();' это отходы, если вы в следующей строке присваиваете что-то другое для 'RO'. Рассмотрим вместо этого 'var RO = JsonConvert.DeserializeObject (ответ);' – crashmstr

ответ

1

Пока я не могу ответить на этот окончательно, потому что у меня нет данных, это то, что я хотел бы начать с:

//take out the long and lengthy parts to make the rest clearer 
//I see there are two things here, intentional? 
var something = RO.hits.hits[0]._source.Biz.Rel[cnt_I].org[cnt_III].mem[cnt_IV].attributter; 
var somethingElse = RO.hits.hits[0]._source.Biz.Rel[cnt_I].mem[cnt_III].xsData[cnt_IV].attributes; 
cnt_V = 0; 
//Here, you are iterating over something[cnt_V].type, but also change cnt_V in the body. 
//Are you sure this is correct? 
foreach (object obj_attributtertype in something[cnt_V].type) 
{ 
    if (Convert.ToString(somethingElse[cnt_V].type) == "KEY_VALUES") 
    { 
     LS_ande = "" + Convert.ToString(somethingElse[cnt_V].values[0].value); 
    } 
    cnt_V++; 
} 

И глядя на это так, вот мой удар в темный.
Итерация с for над Count() элементов в something

var something = RO.hits.hits[0]._source.Biz.Rel[cnt_I].org[cnt_III].mem[cnt_IV].attributter; 
var somethingElse = RO.hits.hits[0]._source.Biz.Rel[cnt_I].mem[cnt_III].xsData[cnt_IV].attributes; 
for (var cnt_V = 0; cnt_V < something.Count(); ++cnt_V) 
{ 
    if (Convert.ToString(somethingElse[cnt_V].type) == "KEY_VALUES") 
    { 
     LS_ande = "" + Convert.ToString(somethingElse[cnt_V].values[0].value); 
    } 
    cnt_V++; 
} 

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

  • Нет связанных вопросов^_^