从json上的json获取数据

时间:2016-06-06 07:04:14

标签: c# arrays json uwp

问题:

如何从json下面的“bundle_file”属性(我放红框的数据)中检索数据? enter image description here

我有从上面的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;
            }

        }

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:1)

您可以为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; }
}