Accessing nested JSON Dictionaries

I'm working on a macro to extract weather information from JSON to insert into different documents, eg a journal entry. I'm having problems accessing values in nested dictionaries.

I found a similar problem in the forums here, but the solution isn't working for me. I also read a few JSON Wiki pages such as the JSON Manual. Nothing works.

Here is my macro

Here is the output

Now, if change the temperature variable to just %Variable%JSONTemperature% I get this output

From everything I have read , including the examples, it looks like I should get the value that I want, but that isn't what is happening.

Ideas?

OS: macOS 10.15.7
Keyboard Maestro: Version 9.0.6

Raw JSON Text in case you want to duplicate my setup.

{"LocalObservationDateTime":"2020-10-09T18:20:00-06:00","EpochTime":1602289200,"WeatherText":"Cloudy","WeatherIcon":7,"HasPrecipitation":false,"PrecipitationType":null,"IsDayTime":true,"Temperature":{"Metric":{"Value":24.8,"Unit":"C","UnitType":17},"Imperial":{"Value":77.0,"Unit":"F","UnitType":18}},"RealFeelTemperature":{"Metric":{"Value":24.1,"Unit":"C","UnitType":17},"Imperial":{"Value":75.0,"Unit":"F","UnitType":18}},"RealFeelTemperatureShade":{"Metric":{"Value":24.1,"Unit":"C","UnitType":17},"Imperial":{"Value":75.0,"Unit":"F","UnitType":18}},"RelativeHumidity":17,"IndoorRelativeHumidity":17,"DewPoint":{"Metric":{"Value":-0.6,"Unit":"C","UnitType":17},"Imperial":{"Value":31.0,"Unit":"F","UnitType":18}},"Wind":{"Direction":{"Degrees":68,"Localized":"ENE","English":"ENE"},"Speed":{"Metric":{"Value":2.8,"Unit":"km/h","UnitType":7},"Imperial":{"Value":1.7,"Unit":"mi/h","UnitType":9}}},"WindGust":{"Speed":{"Metric":{"Value":7.1,"Unit":"km/h","UnitType":7},"Imperial":{"Value":4.4,"Unit":"mi/h","UnitType":9}}},"UVIndex":0,"UVIndexText":"Low","Visibility":{"Metric":{"Value":8.0,"Unit":"km","UnitType":6},"Imperial":{"Value":5.0,"Unit":"mi","UnitType":2}},"ObstructionsToVisibility":"","CloudCover":100,"Ceiling":{"Metric":{"Value":5729.0,"Unit":"m","UnitType":5},"Imperial":{"Value":18796.0,"Unit":"ft","UnitType":0}},"Pressure":{"Metric":{"Value":1010.5,"Unit":"mb","UnitType":14},"Imperial":{"Value":29.84,"Unit":"inHg","UnitType":12}},"PressureTendency":{"LocalizedText":"Rising","Code":"R"},"Past24HourTemperatureDeparture":{"Metric":{"Value":-1.5,"Unit":"C","UnitType":17},"Imperial":{"Value":-3.0,"Unit":"F","UnitType":18}},"ApparentTemperature":{"Metric":{"Value":22.2,"Unit":"C","UnitType":17},"Imperial":{"Value":72.0,"Unit":"F","UnitType":18}},"WindChillTemperature":{"Metric":{"Value":25.0,"Unit":"C","UnitType":17},"Imperial":{"Value":77.0,"Unit":"F","UnitType":18}},"WetBulbTemperature":{"Metric":{"Value":11.9,"Unit":"C","UnitType":17},"Imperial":{"Value":53.0,"Unit":"F","UnitType":18}},"Precip1hr":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"PrecipitationSummary":{"Precipitation":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"PastHour":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"Past3Hours":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"Past6Hours":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"Past9Hours":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"Past12Hours":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"Past18Hours":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"Past24Hours":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}}},"TemperatureSummary":{"Past6HourRange":{"Minimum":{"Metric":{"Value":24.8,"Unit":"C","UnitType":17},"Imperial":{"Value":77.0,"Unit":"F","UnitType":18}},"Maximum":{"Metric":{"Value":29.0,"Unit":"C","UnitType":17},"Imperial":{"Value":84.0,"Unit":"F","UnitType":18}}},"Past12HourRange":{"Minimum":{"Metric":{"Value":9.1,"Unit":"C","UnitType":17},"Imperial":{"Value":48.0,"Unit":"F","UnitType":18}},"Maximum":{"Metric":{"Value":29.0,"Unit":"C","UnitType":17},"Imperial":{"Value":84.0,"Unit":"F","UnitType":18}}},"Past24HourRange":{"Minimum":{"Metric":{"Value":8.3,"Unit":"C","UnitType":17},"Imperial":{"Value":47.0,"Unit":"F","UnitType":18}},"Maximum":{"Metric":{"Value":29.0,"Unit":"C","UnitType":17},"Imperial":{"Value":84.0,"Unit":"F","UnitType":18}}}},"MobileLink":"http://m.accuweather.com/en/us/englewood-co/80110/current-weather/332230?lang=en-us","Link":"http://www.accuweather.com/en/us/englewood-co/80110/current-weather/332230?lang=en-us"}

You need to use %JSONValue% instead of %Variable%, like this:

image

1 Like

I have found that it is much easier to just JavaScript for Automation (JXA) (via a Execute a JavaScript For Automation action) than to use the native KM JSON tools.
JXA can read/write/create KM variables, as well as read/write files.

For more info on JXA, see JXA Resources.

That worked. Thanks!

1 Like

I appreciate the post. I've looked at JXA before, but it's outside my bash/python/ansible wheelhouse atm. I don't want to learn another language for this one task. I prefer to use Keyboard Maestro's built in features, and bash/python for anything it doesn't cover.

If I had another use javascript for anything at all, I'd consider JXA.

1 Like