2016-06-06 3 views
0

Проблема:получить данные из JSON на JSON

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

У меня есть код для извлечения данных из JSON выше, но я был смущен для извлечения данных из свойства «bundle file». Поэтому мне нужно, чтобы принять все данные, включая данные о «bundle_file»

Код:

try 
      { 

       var client = new Windows.Web.Http.HttpClient(); 
       string urlPath = "http://mhndt.com/newsstand/renungan-harian/callback/allWinItems"; 
       var values = new List<KeyValuePair<string, string>> 
      { 
       //new KeyValuePair<string, string>("hal", "1"), 
       //new KeyValuePair<string, string>("limit","300") 
      }; 

       var response = await client.PostAsync(new Uri(urlPath), new Windows.Web.Http.HttpFormUrlEncodedContent(values)); 
       response.EnsureSuccessStatusCode(); 

       if (!response.IsSuccessStatusCode) 
       { 
        RequestException(); 
       } 

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

        //List<object> list = jsonData1.ToList<object>(); 
        //JsonObject jsonData2 = jsonObject["data"].GetObject(); 
        //JsonArray jsonDataBundle = list["bundle_file"].GetArray(); 
        //foreach(JsonValue groupValue1 in jsonDataBundle) 
        //{ 
        // JsonObject groupObject1 = groupValue1.GetObject(); 

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

        BukuAudio file = new BukuAudio(); 
        file.SKU = nid; 
        file.Judul = title; 
        file.Deskripsi = deskripsi; 
        string[] formats = { "d MMMM yyyy" }; 
        var dateTime = DateTime.ParseExact(tanggal, formats, new CultureInfo("id-ID"), DateTimeStyles.None); 

        Int64 n = Int64.Parse(dateTime.ToString("yyyyMMdd")); 
        file.Tanggal = n.ToString(); 
        int tgl = Int32.Parse(file.Tanggal); 
        file.Tipe = tipe; 
        file.NamaTipe = "Tipe: " + namaTipe; 
        file.Gratis = gratis; 
        file.File = "http://mhndt.com/newsstand/rh/item/" + dataFile; 
        file.Cover = "http://mhndt.com/newsstand/rh/item/" + dataFile + ".jpg"; 

        if (licenseInformation.ProductLicenses[file.SKU].IsActive) 
        { 
         file.Harga = "Purchased"; 
        } 
        else 
        { 
         if (file.Gratis == "1") 
         { 
          file.Harga = "Free"; 
         } 
         else 
         { 
          file.Harga = harga; 
         } 
        } 

        if (tgl >= 20150201 || file.Judul == "RH Anak Volume 01 : Yesus Sahabatku") 
        { 
         datasource.Add(file); 
        } 
       } 

       if (jsonData1.Count > 0) 
       { 
        itemGridView.ItemsSource = datasource; 
       } 
       else 
       { 
        MessageDialog messageDialog; 
        messageDialog = new MessageDialog("Data kosong", "Buku atau Audio Tidak tersedia"); 
        messageDialog.Commands.Add(new UICommand("Tutup", (command) => 
        { 
         this.Frame.Navigate(typeof(MainPage)); 
        })); 
        await messageDialog.ShowAsync(); 
       } 



      } 
      catch (HttpRequestException ex) 
      { 
       RequestException(); 
       busyindicator.IsActive = false; 
      } 

     } 
+0

* bundle_file [0] .path_file * и * bundle_file [1] .path_file * ... и так на – Riad

+1

Не могли бы вы вставить данные json? –

+0

json данные на картинке Я ​​прикрепляю – Rose

ответ

1

Попробуйте это будет работать:

использование for in loop для перебора данных вложенных объектов. Я создал образец JSON так же, как вы разместили в вопросе для ссылки.

JSON:

http://mhndt.com/newsstand/renungan-harian/callback/allWinItems

Итерация вложенных записей:

for (var item in obj.data) { 
    if(typeof obj.data[item].bundle_file == 'object') { 
    for(var finalData in obj.data[item].bundle_file) { 
     console.log(obj.data[item].bundle_file[finalData].bundle_file); 
     console.log(obj.data[item].bundle_file[finalData].path_file); 
     console.log(obj.data[item].bundle_file[finalData].pwd_file); 
    } 
    } 
} 

Работа скрипка: https://jsfiddle.net/rohitjindal/dzdpg8dw/3/

+0

Я просто редактирую код. Я имею в виду json получить с сервера: http://mhndt.com/newsstand/renungan-harian/callback/allWinItems – Rose

+0

@ Rose, наконец, я сделал с вашим оригинальным JSON. Просьба проверить скрипку сейчас. Спасибо –

+0

Какой адрес скрипки? Спасибо – Rose

1

Вы можете создать DataContract приписывал класс для JSON и использовать DataContractJsonSerializer для десериализации данных. После этого просто выполните запрос LINQ, чтобы получить нужные данные. Это позволит эффективно и легко обрабатывать любые дальнейшие изменения, если данные JSON изменяются.

Ниже класс можно использовать для разбора JSON (я использовал https://jsonutils.com/ для создания класса)

[DataContract] 
public class Root 
{ 
    [DataMember] 
    public int total { get; set; } 
    [DataMember] 
    public int start { get; set; } 
    [DataMember] 
    public int next { get; set; } 
    [DataMember] 
    public IList<Datum> data { get; set; } 
} 
[DataContract] 
public class Datum 
{ 
    [DataMember] 
    public string idfile { get; set; } 
    [DataMember] 
    public string judul { get; set; } 
    [DataMember] 
    public string sku { get; set; } 
    [DataMember] 
    public string tipe { get; set; } 
    [DataMember] 
    public string nama_tipe { get; set; } 
    [DataMember] 
    public string gratis { get; set; } 
    [DataMember] 
    public string hrg { get; set; } 
    [DataMember] 
    public string katid { get; set; } 
    [DataMember] 
    public string nfile { get; set; } 
    [DataMember] 
    public BundleFile bundle_file { get; set; } 
    [DataMember] 
    public string tgl { get; set; } 
    [DataMember] 
    public string ufile { get; set; } 
    [DataMember] 
    public string deskripsi { get; set; } 
    [DataMember] 
    public string isLokal { get; set; } 
} 
[DataContract] 
public class BundleFile 
{ 
    [DataMember] 
    public string bundle_file { get; set; } 
    [DataMember] 
    public string path_file { get; set; } 
    [DataMember] 
    public string pwd_file { get; set; } 
} 
Смежные вопросы