簡體   English   中英

從json上的json獲取數據

[英]get data from json on json

問題:

如何從下面的json的“ bundle_file”屬性(放入紅色框的數據)中檢索數據? 在此處輸入圖片說明

我上面有從JSON檢索數據的代碼,但是我很困惑從“捆綁文件”屬性中檢索數據。 所以我需要獲取所有數據,包括“ 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;
            }

        }

試試這個將起作用:

使用for in循環迭代嵌套的對象數據。 我創建的示例JSON與您在問題中發布的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/

您可以為JSON創建DataContract屬性類,並使用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; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM