2016-06-08 2 views
0

Как получить данные «bundle file» (на изображении ниже того, что я даю красный круг) в json ниже? enter image description hereВзятие массива данных в массиве в JSON

Стараюсь:

string jsonText = await response.Content.ReadAsStringAsync(); 
JsonObject jsonObject = JsonObject.Parse(jsonText); 
JsonArray jsonData1 = jsonObject["data"].GetArray(); 

foreach (JsonValue groupValue in jsonData1) 
{ 
    JsonObject groupObject = groupValue.GetObject(); 
    string nid = groupObject["sku"].GetString(); 
     string title = groupObject["judul"].GetString(); 
     string deskripsi = groupObject["deskripsi"].GetString(); 
     string tanggal = groupObject["tgl"].GetString(); 
     string tipe = groupObject["tipe"].GetString(); 
     string namaTipe = groupObject["nama_tipe"].GetString(); 
     string gratis = groupObject["gratis"].GetString(); 
     string dataFile = groupObject["nfile"].GetString(); 
     string harga = groupObject["hrg"].GetString(); 
    JsonArray bundle = groupObject["bundle"].GetArray(); 
     foreach(JsonValue groupValue1 in bundle) 
     { 
     JsonObject groupObject1 = groupValue1.GetObject(); 

       string bundleName = groupObject1["bundle_file"].GetString(); 
       string pathFile = groupObject1["path_file"].GetString(); 
     } 
} 

, но в коде JsonArray bundle = groupObject["bundle"].GetArray();, отображает сообщение об ошибке, как показано ниже:

enter image description here

тогда как тип "bundle_file" является массив.

Как это решить?

+0

Возможный дубликат [получить данные от json on json] (http://stackoverflow.com/questions/37651350/get-data-from-json-on-json) –

ответ

0

Это не значение массива. Для получения типа используйте свойство ValueType.

Из сообщения об ошибке мы можем знать, что это ошибка типа. Я скачал файл JSon и выяснили, что проблема заключается в данных, некоторые «расслоение» s этого Json файла имеют тип строки: enter image description here

Так что, когда вы звоните groupObject["bundle"].GetArray(). Это пошло не так.

Чтобы устранить эту проблему, просто обернуть часть ваших кодов с Условным оператором, как показано ниже:

var bundleObj = groupObject["bundle"]; 
if (bundleObj.ValueType == JsonValueType.Array) 
{ 
     JsonArray bundle = bundleObj.GetArray(); 
     foreach (JsonValue groupValue1 in bundle) 
     { 
      JsonObject groupObject1 = groupValue1.GetObject(); 
      string bundleName = groupObject1["bundle_file"].GetString(); 
      string pathFile = groupObject1["path_file"].GetString(); 
     } 
} 

И пропадет ошибка.

+0

json выглядит так: idfile: " 93" , judul: "июль-AUG 2016", SKU: "2016.MHN.RH.JUL.AUG", Тип: "0", nama_tipe: "журнал", бесплатно: "0", HRG: "$ 0,99", katid: "1", nfile: "bundle.24b", расслоение: [ { bundle_file: "bundle.24b_AUG_2016", path_file: «http://mhndt.com/ newsstand/rh/item/bundle.24b/", pwd_file:" Восток # Java101. " }, { bundle_file: "bundle.24b_JUL_2016", path_file: "http://mhndt.com/newsstand/rh/item/bundle.24b/", pwd_file: "Восток # Java101." } ], и в вашем коде, что такое «bundleObj»? – Rose

+0

Извините bundleObj является groupObject ["bundle"], я обновил ответ. –

+0

Для большинства данных «bundle» представляет собой массив. но некоторые из них - пустая строка. Для этих данных «bundle» не может быть преобразован в массив. –

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