问题:
如何从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;
}
}
答案 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);
}
}
}
答案 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; }
}