【发布时间】:2020-07-19 13:04:52
【问题描述】:
我正在尝试解析来自 RestAPI 的 JSON 数据,该 API 为我提供挪威的能源数据 (https://driftsdata.statnett.no/restapi/ProductionConsumption/GetLatestDetailedOverview)
<ProductionConsumptionOverviewViewModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Statnett.Driftsdata.RestApi.Models">
<ConsumptionData>
...
</ConsumptionData>
<Headers>
...
</Headers>
<HydroData>
<ProdConsOverViewModelItem>
<style>hydro</style>
<textTranslationId>General.Hydro</textTranslationId>
<titleTranslationId i:nil="true"/>
<value/>
</ProdConsOverViewModelItem>
<ProdConsOverViewModelItem>
<style i:nil="true"/>
<textTranslationId i:nil="true"/>
<titleTranslationId>ProductionConsumption.HydroSEDesc</titleTranslationId>
<value>4 840</value>
我知道它读起来像 XML,但文档说是 JSON,所以就这样吧。我在阅读它时遇到与 XML 相同的问题。
我设法很好地读取了 JSON 响应,但我无法“挖掘”到正确的位置,因为不同区域的标识符相同。假设我想要下面的 Hydro 生产数据(见屏幕截图)。我怎么会得到那个?我尝试设置 [titleTranslationId] == "ProductionConsumption.HydroSEDesc" 但没有奏效。
它看起来像 XML 但文档说 JSON ?这就是为什么我试图将其视为 JSON。
<ProductionConsumptionOverviewViewModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Statnett.Driftsdata.RestApi.Models">
<ConsumptionData>
...
</ConsumptionData>
<Headers>
...
</Headers>
<HydroData>
<ProdConsOverViewModelItem>
<style>hydro</style>
<textTranslationId>General.Hydro</textTranslationId>
<titleTranslationId i:nil="true"/>
<value/>
</ProdConsOverViewModelItem>
<ProdConsOverViewModelItem>
<style i:nil="true"/>
<textTranslationId i:nil="true"/>
<titleTranslationId>ProductionConsumption.HydroSEDesc</titleTranslationId>
<value>4 840</value>
我正在使用 SwiftyJSON 来处理响应。
我找到了其他一些treads,但无法让它为我工作。有谁能帮忙吗?这是我的代码:
func getEnergyData(url: String){
AF.request(url, method: .get).responseJSON{ response in
switch response.result {
case .success(let json):
print("json success")
//print(json)
let energyJSON : JSON = JSON(response.result)
self.updateEnergyData(json: energyJSON)
case .failure(let error):
print(error)
}
}
}
试图解析它:
func updateEnergyData(json : JSON){
if let results = json["ProductionConsumptionOverviewViewModel"]["HydroData"]["ProdConsOverViewModelItem"]["value"].double{
print(results)
}
else{
print("parse fail")
}
}
}
【问题讨论】:
-
那张截图是 xml 而不是 json 你知道吗?你真的应该通过使用
Codable来使用内置的 json 功能,它更现代,更容易在 stackoverflow 获得帮助 -
是的,我尝试了几次 xml 解析,但根本无法正常工作。文档说“数据为 json”,所以我认为它是:P driftsdata.statnett.no/restapi
-
是的,但你为什么要发布 xml 作为你问题的一部分?并将示例数据作为文本而不是图像发布
-
api 响应超长,我认为这会更容易看到。我在上面的文本中发布了指向 api 的链接。
-
如果我搞砸了,我很抱歉,我是这个论坛的新手。对不起
标签: json swift swifty-json