Hey i have one functioning api... it is for sun times. The result comes in one line rather than multi. Is it possible to seperate it? Below is a copy of my result but in seperate lines as i would like them to be.
//{"results":{
//"sunrise":"6:48:50 PM",
//"sunset":"9:14:12 AM",
//"solar_noon":"2:01:31 AM",
//"day_length":"14:25:22",
//"civil_twilight_begin":"6:19:18 PM",
//"civil_twilight_end":"9:43:44 AM",
//"nautical_twilight_begin":"5:42:44 PM",
//"nautical_twilight_end":"10:20:18 AM",
//"astronomical_twilight_begin":"5:02:31 PM",
//"astronomical_twilight_end":"11:00:31 AM"},
//"status":"OK"}
Is this achievable?
I also need to alter times but i think i can manage that!!?!
Reformat writable file
Moderator: Martin
Re: Reformat writable file
Convert your response to an object and access the desired value like this:
Code: Select all
obj = fromJSON(response);
sunset = obj['results']['sunset'];
Re: Reformat writable file
Hey ive tried using that method on this but i could not put it in to onject?!?!
{"location":{"name":"xxxxxx","region":"Victoria","country":"xxxxxxxx","lat":xxxxxx,"lon":xxxxxx"tz_id":"xxxxxxxx","localtime_epoch":1575597511,"localtime":"2019-12-06 12:58"},"current":{"last_updated":"2019-12-06 12:45","temp_c":22.0,"condition":{"text":"Sunny"},"wind_kph":24.1,"wind_degree":270,"wind_dir":"W","pressure_in":30.3,"precip_mm":0.0,"humidity":31,"cloud":0,"feelslike_c":23.4,"vis_km":10.0,"uv":6.0,"gust_kph":25.9},"forecast":{"forecastday":[{"date":"2019-12-06","day":{"maxtemp_c":24.9,"mintemp_c":9.2,"avgtemp_c":17.8,"maxwind_kph":23.8,"totalprecip_mm":0.0,"avgvis_km":10.0,"avghumidity":53.0,"condition":{"text":"Partly cloudy"},"uv":10.9},"astro":{"sunrise":"05:49 AM","sunset":"08:18 PM","moonrise":"02:27 PM","moonset":"02:32 AM"}}]},"alert":{}}
I also tried to convert this one too but could not?!?!
{"location":{"name":"xxxxxx","region":"xxxxxx","country":"xxxxxxx,"lat":xxxxxx,"lon":xxxxxx,"tz_id":"xxxxxxxx","localtime_epoch":1575597511,"localtime":"2019-12-06 12:58"},"astronomy":{"astro":{"sunrise":"05:49 AM","sunset":"08:18 PM","moonrise":"02:27 PM","moonset":"02:32 AM"}}}
I have SUCCESSFULLY converted some others but im stuck with these two.
{"location":{"name":"xxxxxx","region":"Victoria","country":"xxxxxxxx","lat":xxxxxx,"lon":xxxxxx"tz_id":"xxxxxxxx","localtime_epoch":1575597511,"localtime":"2019-12-06 12:58"},"current":{"last_updated":"2019-12-06 12:45","temp_c":22.0,"condition":{"text":"Sunny"},"wind_kph":24.1,"wind_degree":270,"wind_dir":"W","pressure_in":30.3,"precip_mm":0.0,"humidity":31,"cloud":0,"feelslike_c":23.4,"vis_km":10.0,"uv":6.0,"gust_kph":25.9},"forecast":{"forecastday":[{"date":"2019-12-06","day":{"maxtemp_c":24.9,"mintemp_c":9.2,"avgtemp_c":17.8,"maxwind_kph":23.8,"totalprecip_mm":0.0,"avgvis_km":10.0,"avghumidity":53.0,"condition":{"text":"Partly cloudy"},"uv":10.9},"astro":{"sunrise":"05:49 AM","sunset":"08:18 PM","moonrise":"02:27 PM","moonset":"02:32 AM"}}]},"alert":{}}
I also tried to convert this one too but could not?!?!
{"location":{"name":"xxxxxx","region":"xxxxxx","country":"xxxxxxx,"lat":xxxxxx,"lon":xxxxxx,"tz_id":"xxxxxxxx","localtime_epoch":1575597511,"localtime":"2019-12-06 12:58"},"astronomy":{"astro":{"sunrise":"05:49 AM","sunset":"08:18 PM","moonrise":"02:27 PM","moonset":"02:32 AM"}}}
I have SUCCESSFULLY converted some others but im stuck with these two.
Re: Reformat writable file
When you try to censor your location, you've deleted the comma. For the first, it is at the "lon":xxxxxx"tz_id". It should be "lon":xxxxxx,"tz_id"
Or when you execute fromJSON(), you should see the error at index 96 of the json string.
For the second one, it is at index 68, "country":"xxxxxxx,"lat". The closing double quotes is missing, should be "country":"xxxxxxx","lat".
These are the fixed version of your json.
Or when you execute fromJSON(), you should see the error at index 96 of the json string.
For the second one, it is at index 68, "country":"xxxxxxx,"lat". The closing double quotes is missing, should be "country":"xxxxxxx","lat".
These are the fixed version of your json.
Code: Select all
a = '{"location":{"name":"xxxxxx","region":"Victoria","country":"xxxxxxxx","lat":xxxxxx,"lon":xxxxxx,"tz_id":"xxxxxxxx","localtime_epoch":1575597511,"localtime":"2019-12-06 12:58"},"current":{"last_updated":"2019-12-06 12:45","temp_c":22.0,"condition":{"text":"Sunny"},"wind_kph":24.1,"wind_degree":270,"wind_dir":"W","pressure_in":30.3,"precip_mm":0.0,"humidity":31,"cloud":0,"feelslike_c":23.4,"vis_km":10.0,"uv":6.0,"gust_kph":25.9},"forecast":{"forecastday":[{"date":"2019-12-06","day":{"maxtemp_c":24.9,"mintemp_c":9.2,"avgtemp_c":17.8,"maxwind_kph":23.8,"totalprecip_mm":0.0,"avgvis_km":10.0,"avghumidity":53.0,"condition":{"text":"Partly cloudy"},"uv":10.9},"astro":{"sunrise":"05:49 AM","sunset":"08:18 PM","moonrise":"02:27 PM","moonset":"02:32 AM"}}]},"alert":{}}';
b = '{"location":{"name":"xxxxxx","region":"xxxxxx","country":"xxxxxxx","lat":xxxxxx,"lon":xxxxxx,"tz_id":"xxxxxxxx","localtime_epoch":1575597511,"localtime":"2019-12-06 12:58"},"astronomy":{"astro":{"sunrise":"05:49 AM","sunset":"08:18 PM","moonrise":"02:27 PM","moonset":"02:32 AM"}}}';
jsa = fromJSON(a);
jsb = fromJSON(b);
Index of Automagic useful thread List of my other useful posts (and others')
Xiaomi Redmi Note 5 (whyred), AOSP Extended v6.7 build 20200310 Official, Android Pie 9.0, Rooted.
Xiaomi Redmi Note 5 (whyred), AOSP Extended v6.7 build 20200310 Official, Android Pie 9.0, Rooted.
Re: Reformat writable file
Lol... yep. How you said is how the original json is wrote. I was just putting a bunch of "x" in that cause i didnt want to be banned for providing realtime info, etc. On the original output the comma is in its right place. And same with the other one. Sorry i rushed that. All is formatted right as it comes. I just cannot filter certain sections to save as var nor place in to objects. It does not work!?
Re: Reformat writable file
This is the objects elements as described by the dev:
///
forecastday:
Parent element forecastday
-> day: 'day' element inside forecastday contains
max/min temperature, average temperature
forecastday -> astro forecastday -> hour:
Forecastday
Parent element
forecastday -> dayday element contains:
Max, min and average temperature Max wind speed Total precipitation Day weather condition
forecastday -> astroastro element contains
sunrise, sunset, moonrise and moonset data
forecastday -> hourhour element contains
hour by hour weather forecast information
///
I have tried a few different variants of this:
But it errors with null no matter how i try to grab the elements. I jave no idea what i am doing clearly
///
forecastday:
Parent element forecastday
-> day: 'day' element inside forecastday contains
max/min temperature, average temperature
forecastday -> astro forecastday -> hour:
Forecastday
Parent element
forecastday -> dayday element contains:
Max, min and average temperature Max wind speed Total precipitation Day weather condition
forecastday -> astroastro element contains
sunrise, sunset, moonrise and moonset data
forecastday -> hourhour element contains
hour by hour weather forecast information
///
I have tried a few different variants of this:
Code: Select all
obj = fromJSON(response);
one = obj['forecastday']['maxtemp_c'];
obj2 = fromJSON(response);
two = obj2['forecastday']['astro']['sunrise'];
obj3 = fromJSON(response);
three = obj3['forecastday']['condition'];
Re: Reformat writable file
No problem with the replacing xxxx, it should be done to protect your privacy too.
You don't need to convert fromJSON() everytime. You only need to convert once and use that object further. Use debug dialog to dig down the obj, to find the key-value you want to access. It is the fastest way to understand how nested map/list work. See how to use debug dialog here : viewtopic.php?t=7262
- The first level of the obj is a Map (look at the top title when you tap the {obj}) contains 4 keys : location, current, forecast, alert. The data you want is in forecast, dig down on ["forecast"]
- It shows you only single key : forecastday, so no other way, dig down on ["forecastday"]
- Now, pay attention to the type above, it now shows List. And it has only single element, with index 0. Dig down on [0]
- Inside the [0], it changes to Map again, with 3 keys : date, day, astro. maxtemp_c is at the day, so dig down on ["day"]
- Finally we see the maxtemp_c directly with the value at the side. You can make sure of this by tapping change value on maxtemp_c to ensure it is not a list/map anymore. It is a number type variable. So the last key is ["maxtemp_c"]
So to get the {maxtemp_c}, we have to dig down very far.
You might think it is very long. But once you get used to it, you can conquer any nested map/list object. It is just a bit longer in the script. But eventually you will love it.
Using the same method, you will get the sunrise (in astro key) and condition (dig down another level)
You don't need to convert fromJSON() everytime. You only need to convert once and use that object further. Use debug dialog to dig down the obj, to find the key-value you want to access. It is the fastest way to understand how nested map/list work. See how to use debug dialog here : viewtopic.php?t=7262
- The first level of the obj is a Map (look at the top title when you tap the {obj}) contains 4 keys : location, current, forecast, alert. The data you want is in forecast, dig down on ["forecast"]
- It shows you only single key : forecastday, so no other way, dig down on ["forecastday"]
- Now, pay attention to the type above, it now shows List. And it has only single element, with index 0. Dig down on [0]
- Inside the [0], it changes to Map again, with 3 keys : date, day, astro. maxtemp_c is at the day, so dig down on ["day"]
- Finally we see the maxtemp_c directly with the value at the side. You can make sure of this by tapping change value on maxtemp_c to ensure it is not a list/map anymore. It is a number type variable. So the last key is ["maxtemp_c"]
So to get the {maxtemp_c}, we have to dig down very far.
Code: Select all
obj = fromJSON(response);
maxtemp_c = obj["forecast"]["forecastday"][0]["day"]["maxtemp_c"];
Using the same method, you will get the sunrise (in astro key) and condition (dig down another level)
Code: Select all
obj = fromJSON(response);
maxtemp_c = obj["forecast"]["forecastday"][0]["day"]["maxtemp_c"];
sunrise = obj["forecast"]["forecastday"][0]["astro"]["sunrise"];
condition = obj["forecast"]["forecastday"][0]["day"]["condition"]["text"];
Last edited by Desmanto on 07 Dec 2019 03:52, edited 1 time in total.
Index of Automagic useful thread List of my other useful posts (and others')
Xiaomi Redmi Note 5 (whyred), AOSP Extended v6.7 build 20200310 Official, Android Pie 9.0, Rooted.
Xiaomi Redmi Note 5 (whyred), AOSP Extended v6.7 build 20200310 Official, Android Pie 9.0, Rooted.
Re: Reformat writable file
Oh cool. So i was on the right track when i started using more than one key, just didnt do enough.
Thank you soooooo much. That little walkthrough of my data helped me wrap my head around maps,keys,etc soooooo much better than any tutorial or examples i have read. Omg thank you
Thank you soooooo much. That little walkthrough of my data helped me wrap my head around maps,keys,etc soooooo much better than any tutorial or examples i have read. Omg thank you