0
嘗試挖掘json數據時出現以下錯誤。使用無效鍵值訪問JArray值
使用無效鍵值訪問JArray值:「RateInfos」。預期陣列位置索引。
任何人都可以請這個問題的幫助,我想獲得currentAllotment:3的價值,這是從json提供的底部15行。
customerSessionId: "0ABAA82A-4307-A913-E172-4D238D901107",
numberOfRoomsRequested: 1,
moreResultsAvailable: true,
cacheKey: "-73d4307a:13e174d238d:-10fe",
cacheLocation: "10.186.168.42:7301",
cachedSupplierResponse: {
@matchedLocale: "true",
@matchedCurrency: "true",
@tpidUsed: "5101",
@otherOverheadTime: "1",
@candidatePreptime: "98",
@supplierResponseTime: "498",
@supplierResponseNum: "1",
@supplierRequestNum: "207",
@cachedTime: "0",
@supplierCacheTolerance: "NOT_SUPPORTED"
},
HotelList: {
@activePropertyCount: "224",
@size: "1",
HotelSummary: {
@ubsScore: "15815285",
@order: "0",
hotelId: 161395,
name: "Larkspur Landing Bellevue - An All-Suite Hotel",
address1: "15805 Se 37th St",
city: "Bellevue",
stateProvinceCode: "WA",
postalCode: 98006,
countryCode: "US",
airportCode: "SEA",
supplierType: "E",
propertyCategory: 1,
hotelRating: 3,
confidenceRating: 95,
amenityMask: 7823362,
tripAdvisorRating: 4,
tripAdvisorReviewCount: 81,
tripAdvisorRatingUrl: "http://www.tripadvisor.com/img/cdsi/img2/ratings/traveler/4.0-12345-4.gif",
locationDescription: "Near Bellevue College",
shortDescription: "<p><b>Location. </b> <br />Located in Bellevue, Larkspur Landing Bellevue - An All-Suite Hotel is in the suburbs and close to Bellevue College, T-Mobile USA Headquarters, and Factoria Mall. Nearby",
highRate: 64.45,
lowRate: 51.56,
rateCurrencyCode: "GBP",
latitude: 47.57755,
longitude: -122.13193,
proximityDistance: 2.0668056,
proximityUnit: "MI",
hotelInDestination: true,
thumbNailUrl: "/hotels/1000000/130000/127100/127040/127040_14_t.jpg",
deepLink: "http://travel.ian.com/index.jsp?pageName=hotAvail&cid=55505&hotelID=161395&mode=2&numberOfRooms=1&room-0-adult-total=2&room-0-child-total=0&arrivalMonth=4&arrivalDay=17&departureMonth=4&departureDay=19&showInfo=true&locale=en_US&currencyCode=GBP",
RoomRateDetailsList: {
RoomRateDetails: {
roomTypeCode: 200207592,
rateCode: 201183732,
maxRoomOccupancy: 2,
quotedRoomOccupancy: 2,
minGuestAge: 0,
roomDescription: "Studio Suite Accessible",
propertyAvailable: true,
propertyRestricted: false,
expediaPropertyId: 127040,
RateInfos: {
@size: "1",
RateInfo: {
@rateChange: "false",
@promo: "true",
@priceBreakdown: "true",
RoomGroup: {
Room: {
numberOfAdults: 2,
numberOfChildren: 0,
rateKey: "adbdfb1a-df03-4577-9970-ed62f4c84a17"
}
},
ChargeableRateInfo: {
@total: "117.14",
@surchargeTotal: "14.02",
@grossProfitOnline: "18.82",
@grossProfitOffline: "11.21",
@nightlyRateTotal: "103.12",
@maxNightlyRate: "51.56",
@currencyCode: "GBP",
@commissionableUsdTotal: "158.4",
@averageRate: "51.56",
@averageBaseRate: "64.45",
NightlyRatesPerRoom: {
@size: "2",
NightlyRate: {
0: {
@promo: "true",
@rate: "51.56",
@baseRate: "64.45"
},
1: {
@promo: "true",
@rate: "51.56",
@baseRate: "64.45"
}
}
},
Surcharges: {
@size: "1",
Surcharge: {
@amount: "14.02",
@type: "TaxAndServiceFee"
}
}
},
nonRefundable: false,
rateType: "MerchantStandard",
promoId: 202578064,
promoDescription: "Sale! Save 20% on this Stay.",
promoType: "Standard",
currentAllotment: 3
}
},
ValueAdds: {
@size: "1",
ValueAdd: {
@id: "1024",
description: "Free High-Speed Internet"
}
}
}
}
}
}
}
一行代碼引發錯誤。
IList<JToken> rates = root["HotelListResponse"]["HotelList"]["HotelSummary"]["RateInfos"]["RateInfo"].Children().Values().ToList();
將不勝感激,如果有人也可以告訴我一個eaiser的方式比我正在做的深入到json數據。
感謝 喬治
好像它抱怨RateInfos是一個JArray你嘗試的IList率=根[「HotelListResponse」] [」 HotelList 「] [」 HotelSummary 「] [」 RateInfos 「] [0] [」 RateInfo「]兒童()的值()ToList()。;當然,這隻會讓你獲得第一個RateInfo。至於更好的訪問數據的方式,我不知道類似xml的任何類型的後代類型對json的支持。 –
cgotberg
嗨cgotberg是的,試過了,我讀過的書以及我在網上閱讀的信息都說json數組被[]包圍,但沒有數據有方括號,所以它爲什麼會抱怨數組索引。我對切換回xml有認真的想法,對我來說這很容易 – CareerChange
再次看看JSON它可能是問題是你排除這一層層次結構RoomRateDetailsList:{RoomRateDetails:{。您可以嘗試使用IList rates = root [「HotelListResponse」] [「HotelList」] [「HotelSummary」] [「RoomRateDetailsList」] [「RoomRateDetails」] [「RateInfos」] [「RateInfo」]。Children()。Values ).ToList();理想情況下,這是一個非常複雜的對象,將其反序列化爲合適的對象。 –
cgotberg