在解析一个长的json时遇到困难。我以前使用过来自Github的'Jsonconverter‘,但从来没有用过这么长的json。在下面的响应中,我需要获取'odometerInMeters':' value‘,然后再获取其余的值,所以我需要能够搜索值并将其声明到一个string-field中。
代码:
xmlhttp.Open "GET", URL, False
xmlhttp.SetRequestHeader "Content-Type", "application/json"
xmlhttp.SetRequestHeader "x-api-key", xapikey
xmlhttp.SetRequestHeader "Authorization", Token
xmlhttp.Send
Dim Parsed As Dictionary
Set Parsed = mdl_JsonConverter.ParseJson(xmlhttp.ResponseText)
Dim Values As Variant
ReDim Values(Parsed("values").Count, 3)
Dim Value As Dictionary
Dim i As Long
i = 0
For Each Value In Parsed("values")
Values(i, 0) = Value("odometerInMeters")("value")
i = i + 1
Next Value
JSON示例:
{
"vehicle": {
"vehicleId": "TESTID",
"vin": "2651654156161651561"
},
"ignitionState": {
"state": "IGNITION_OFF",
"timestampObserved": "2018-04-30T23:17:05.000Z"
},
"warningBrakeLiningWear": null,
"warningBrakeFluid": {
"value": false,
"timestampObserved": "2018-04-28T08:32:43.000Z"
},
"tankLevelPercent": null,
"warningWashWater": {
"value": false,
"timestampObserved": "2018-04-28T08:32:43.000Z"
},
"warningLowBattery": {
"value": false,
"timestampObserved": "2018-04-28T08:32:43.000Z"
},
"warningCoolantLevelLow": {
"value": false,
"timestampObserved": "2018-04-28T08:32:43.000Z"
},
"engineCoolantTemperatureCelsius": null,
"engineOilTemperatureCelsius": null,
"parkBrakeStatus": null,
"roofTopStatus": null,
"sunroofStatus": null,
"sunroofEvent": null,
"liquidConsumptionStart": null,
"liquidConsumptionReset": null,
"rangeLiquidInMeters": null,
"liquidRangeSkipIndication": null,
"gasConsumptionStart": null,
"gasConsumptionReset": null,
"gasTankLevelInLitres": null,
"gasTankRangeInMeters": null,
"odometerInMeters": {
"value": 97156000,
"timestampObserved": "2018-04-30T23:17:05.000Z"
},
"position": {
"latitude": 99.11466,
"longitude": 99.54858,
"altitude": null,
"speed": 20,
"heading": 0,
"timestampObserved": "2018-04-30T23:17:05.000Z"
},
"tyreWarningLamp": null,
"tyreFrontLeft": {
"status": "NONE",
"pressureInPascal": 583200,
"timestampObserved": "2018-04-28T08:32:43.000Z"
},
"tyreFrontRight": {
"status": "NONE",
"pressureInPascal": 344700,
"timestampObserved": "2018-04-28T08:32:43.000Z"
},
"tyreRearLeft": {
"status": "NONE",
"pressureInPascal": 136600,
"timestampObserved": "2018-04-28T08:32:43.000Z"
},
"tyreRearRight": {
"status": "NONE",
"pressureInPascal": 433800,
"timestampObserved": "2018-04-28T08:32:43.000Z"
},
"tyreWarningPRW": null,
"serviceIntervalDays": null,
"serviceIntervalDistanceInMeters": null,
"maxRangeInMeters": null,
"drivenTimeInSecondsStart": null,
"drivenTimeInSecondsReset": null,
"averageSpeedInMetersPerSecondStart": null,
"averageSpeedInMetersPerSecondReset": null,
"distanceInMetersStart": null,
"distanceInMetersReset": null,
"immobilizerActive": null,
"centralLockOverallLockState": null,
"batteryVoltage": {
"value": 12.3,
"timestampObserved": "2018-04-28T08:32:43.000Z"
}
}
发布于 2018-06-07 04:10:29
好的,伙计们,非常感谢所有的投入,不确定这是否是“最好的”解决方案,但它让我摆脱了痛苦:)
Dim json As Dictionary
Dim item As Dictionary
Dim tempjson As Object, tempItem As Object
Set json = mdl_JsonConverter.ParseJson(XmlHttp.ResponseText) '
For Each json_Key In json.Keys
'some lines are <NULL> values
On Error Resume Next:
Set item = json(json_Key)
Partialjson = (mdl_JsonConverter.ConvertToJson(item))
Set tempjson = mdl_JsonConverter.ParseJson(Partialjson)
If json_Key = "vehicle" Then
vehicle = tempjson("vehicleId")
vin = tempjson("vin")
End If
If json_Key = "odometerInMeters" Then
Mileage = tempjson("value") / 1000
Else
End If
'....
Next
https://stackoverflow.com/questions/50702533
复制相似问题