[英]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);
}
}
}
您可以為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.