I am attempting to read the data from this URL:
https://environment.data.gov.uk/flood-monitoring/id/measures/681210-level-stage-i-15_min-m/readings?_sorted&_limit=3
The URL returns:
{
"@context":"http://environment.data.gov.uk/flood-monitoring/meta/context.jsonld",
"meta":{
"publisher":"Environment Agency",
"licence":"http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/",
"documentation":"http://environment.data.gov.uk/flood-monitoring/doc/reference",
"version":"0.9",
"comment":"Status: Beta service",
"hasFormat":[
"http://environment.data.gov.uk/flood-monitoring/id/measures/681210-level-stage-i-15_min-m/readings.csv?_sorted&_limit=3",
"http://environment.data.gov.uk/flood-monitoring/id/measures/681210-level-stage-i-15_min-m/readings.rdf?_sorted&_limit=3",
"http://environment.data.gov.uk/flood-monitoring/id/measures/681210-level-stage-i-15_min-m/readings.ttl?_sorted&_limit=3",
"http://environment.data.gov.uk/flood-monitoring/id/measures/681210-level-stage-i-15_min-m/readings.html?_sorted&_limit=3"
],
"limit":3
},
"items":[
{
"@id":"http://environment.data.gov.uk/flood-monitoring/data/readings/681210-level-stage-i-15_min-m/2024-02-15T12-15-00Z",
"dateTime":"2024-02-15T12:15:00Z",
"measure":"http://environment.data.gov.uk/flood-monitoring/id/measures/681210-level-stage-i-15_min-m",
"value":1.043
},
{
"@id":"http://environment.data.gov.uk/flood-monitoring/data/readings/681210-level-stage-i-15_min-m/2024-02-15T12-00-00Z",
"dateTime":"2024-02-15T12:00:00Z",
"measure":"http://environment.data.gov.uk/flood-monitoring/id/measures/681210-level-stage-i-15_min-m",
"value":1.05
},
{
"@id":"http://environment.data.gov.uk/flood-monitoring/data/readings/681210-level-stage-i-15_min-m/2024-02-15T11-45-00Z",
"dateTime":"2024-02-15T11:45:00Z",
"measure":"http://environment.data.gov.uk/flood-monitoring/id/measures/681210-level-stage-i-15_min-m",
"value":1.058
}
]
}
I am using this to loop through the records from the items section:
let url = "https://environment.data.gov.uk/flood-monitoring/id/measures/681210-level-stage-i-15_min-m/readings?_sorted&_limit=3";
var request;
if(window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else {
request = new ActiveXObject("Microsoft.XMLHTTP");
}
request.open('GET', url);
request.onreadystatechange = function() {
if ((request.status === 200) && (request.readyState === 4)) {
var info = JSON.parse(request.responseText);
var output = "";
for (var i = 0; i <= info.items.length-1; i++) {
for(var key in info.items[i]) {
console.log(info.items[i]['value']);
}
}
}
}
request.send();
The following is written to the console:
1.043
1.043
1.043
1.043
1.05
1.05
1.05
1.05
1.058
1.058
1.058
1.058
I presume that’s because each record in the item contains 4 elements / attributes (sorry I don’t know the correct term to use) – for example:
"@id":"http://environment.data.gov.uk/flood-monitoring/data/readings/681210-level-stage-i-15_min-m/2024-02-15T12-00-00Z",
"dateTime":"2024-02-15T12:00:00Z",
"measure":"http://environment.data.gov.uk/flood-monitoring/id/measures/681210-level-stage-i-15_min-m",
"value":1.05
How could I change the loop so that only 3 records are returned, accessing the value attribute only?
I would prefer to use vanilla JS rather than jQuery.
Sorry for not knowing the answer, I will probably be downvoted for that. I have spent all morning trying to work it out but I have not been able to.