From 4c5c92a0423529e3ad1bcd5280f1e8fa6ddc624d Mon Sep 17 00:00:00 2001
From: Daniel Hjertholm <8713259+danhje@users.noreply.github.com>
Date: Tue, 19 Mar 2024 22:04:49 +0100
Subject: [PATCH] Initial commit
---
.github/workflows/CI.yml | 118 +
.gitignore | 72 +
.pre-commit-config.yaml | 28 +
Cargo.lock | 304 ++
Cargo.toml | 12 +
LICENSE | 9 +
README.md | 65 +
poetry.lock | 141 +
pyproject.toml | 132 +
rustfmt.toml | 1 +
src/lib.rs | 138 +
tests/data/forecast.json | 8680 ++++++++++++++++++++++++++++++++++++++
tests/data/forecast.xml | 2231 ++++++++++
tests/test_parse.py | 109 +
14 files changed, 12040 insertions(+)
create mode 100644 .github/workflows/CI.yml
create mode 100644 .gitignore
create mode 100644 .pre-commit-config.yaml
create mode 100644 Cargo.lock
create mode 100644 Cargo.toml
create mode 100644 LICENSE
create mode 100644 README.md
create mode 100644 poetry.lock
create mode 100644 pyproject.toml
create mode 100644 rustfmt.toml
create mode 100644 src/lib.rs
create mode 100644 tests/data/forecast.json
create mode 100755 tests/data/forecast.xml
create mode 100644 tests/test_parse.py
diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml
new file mode 100644
index 0000000..5cd9e32
--- /dev/null
+++ b/.github/workflows/CI.yml
@@ -0,0 +1,118 @@
+# This file is autogenerated by maturin v1.5.0
+# To update, run
+#
+# maturin generate-ci github
+#
+name: CI
+
+on:
+ push:
+ branches:
+ - main
+ - master
+ tags:
+ - '*'
+ pull_request:
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+jobs:
+ linux:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target: [x86_64, x86, aarch64, armv7, s390x, ppc64le]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
+ with:
+ python-version: '3.10'
+ - name: Build wheels
+ uses: PyO3/maturin-action@v1
+ with:
+ target: ${{ matrix.target }}
+ args: --release --out dist --find-interpreter
+ sccache: 'true'
+ manylinux: auto
+ - name: Upload wheels
+ uses: actions/upload-artifact@v4
+ with:
+ name: wheels-linux-${{ matrix.target }}
+ path: dist
+
+ windows:
+ runs-on: windows-latest
+ strategy:
+ matrix:
+ target: [x64, x86]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
+ with:
+ python-version: '3.10'
+ architecture: ${{ matrix.target }}
+ - name: Build wheels
+ uses: PyO3/maturin-action@v1
+ with:
+ target: ${{ matrix.target }}
+ args: --release --out dist --find-interpreter
+ sccache: 'true'
+ - name: Upload wheels
+ uses: actions/upload-artifact@v4
+ with:
+ name: wheels-windows-${{ matrix.target }}
+ path: dist
+
+ macos:
+ runs-on: macos-latest
+ strategy:
+ matrix:
+ target: [x86_64, aarch64]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
+ with:
+ python-version: '3.10'
+ - name: Build wheels
+ uses: PyO3/maturin-action@v1
+ with:
+ target: ${{ matrix.target }}
+ args: --release --out dist --find-interpreter
+ sccache: 'true'
+ - name: Upload wheels
+ uses: actions/upload-artifact@v4
+ with:
+ name: wheels-macos-${{ matrix.target }}
+ path: dist
+
+ sdist:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Build sdist
+ uses: PyO3/maturin-action@v1
+ with:
+ command: sdist
+ args: --out dist
+ - name: Upload sdist
+ uses: actions/upload-artifact@v4
+ with:
+ name: wheels-sdist
+ path: dist
+
+ release:
+ name: Release
+ runs-on: ubuntu-latest
+ if: "startsWith(github.ref, 'refs/tags/')"
+ needs: [linux, windows, macos, sdist]
+ steps:
+ - uses: actions/download-artifact@v4
+ - name: Publish to PyPI
+ uses: PyO3/maturin-action@v1
+ env:
+ MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
+ with:
+ command: upload
+ args: --non-interactive --skip-existing wheels-*/*
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c8f0442
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,72 @@
+/target
+
+# Byte-compiled / optimized / DLL files
+__pycache__/
+.pytest_cache/
+*.py[cod]
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+.venv/
+env/
+bin/
+build/
+develop-eggs/
+dist/
+eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+include/
+man/
+venv/
+*.egg-info/
+.installed.cfg
+*.egg
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+pip-selfcheck.json
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.cache
+nosetests.xml
+coverage.xml
+
+# Translations
+*.mo
+
+# Mr Developer
+.mr.developer.cfg
+.project
+.pydevproject
+
+# Rope
+.ropeproject
+
+# Django stuff:
+*.log
+*.pot
+
+.DS_Store
+
+# Sphinx documentation
+docs/_build/
+
+# PyCharm
+.idea/
+
+# VSCode
+.vscode/
+
+# Pyenv
+.python-version
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000..3d92976
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,28 @@
+---
+default_language_version:
+ python: python3
+repos:
+ - repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v4.5.0
+ hooks:
+ - id: check-json
+ - id: check-merge-conflict
+ - id: debug-statements
+ - id: detect-private-key
+ - id: check-yaml
+ - id: check-toml
+ - id: end-of-file-fixer
+ - id: trailing-whitespace
+ - repo: https://github.com/astral-sh/ruff-pre-commit
+ rev: v0.3.2
+ hooks:
+ - id: ruff
+ args: [--fix, --exit-non-zero-on-fix]
+ - id: ruff-format
+ - repo: https://github.com/doublify/pre-commit-rust
+ rev: master
+ hooks:
+ - id: fmt
+ - id: cargo-check
+ - id: clippy
+ args: [--fix, --allow-dirty, --allow-staged]
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644
index 0000000..4c96ea2
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,304 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "autocfg"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "indoc"
+version = "2.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5"
+
+[[package]]
+name = "libc"
+version = "0.2.153"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "memchr"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets",
+]
+
+[[package]]
+name = "portable-atomic"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "pyo3"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a02a88a17e74cadbc8ce77855e1d6c8ad0ab82901a4a9b5046bd01c1c0bd95cd"
+dependencies = [
+ "cfg-if",
+ "indoc",
+ "libc",
+ "memoffset",
+ "parking_lot",
+ "portable-atomic",
+ "pyo3-build-config",
+ "pyo3-ffi",
+ "pyo3-macros",
+ "unindent",
+]
+
+[[package]]
+name = "pyo3-build-config"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5eb0b6ecba38961f6f4bd6cd5906dfab3cd426ff37b2eed5771006aa31656f1"
+dependencies = [
+ "once_cell",
+ "target-lexicon",
+]
+
+[[package]]
+name = "pyo3-ffi"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba8a6e48a29b5d22e4fdaf132d8ba8d3203ee9f06362d48f244346902a594ec3"
+dependencies = [
+ "libc",
+ "pyo3-build-config",
+]
+
+[[package]]
+name = "pyo3-macros"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e80493c5965f94a747d0782a607b2328a4eea5391327b152b00e2f3b001cede"
+dependencies = [
+ "proc-macro2",
+ "pyo3-macros-backend",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pyo3-macros-backend"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcd7d86f42004025200e12a6a8119bd878329e6fddef8178eaafa4e4b5906c5b"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "pyo3-build-config",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.31.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quick-xmltodict"
+version = "0.1.0"
+dependencies = [
+ "pyo3",
+ "quick-xml",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "smallvec"
+version = "1.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
+
+[[package]]
+name = "syn"
+version = "2.0.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "002a1b3dbf967edfafc32655d0f377ab0bb7b994aa1d32c8cc7e9b8bf3ebb8f0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unindent"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce"
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..b633087
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "quick-xmltodict"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+name = "quick_xmltodict"
+crate-type = ["cdylib"]
+
+[dependencies]
+pyo3 = "*"
+quick-xml = "*"
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..12cd026
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) 2024, Statnett
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..1351c25
--- /dev/null
+++ b/README.md
@@ -0,0 +1,65 @@
+# quick-xmltodict
+
+Efficient XML-to-dict conversion backed by Rust.
+
+```python
+>>> from quick_xmltodict import parse
+
+>>> xml = """
+...
+...
+... Her
+... Spike Jonze
+... 2013
+... Science Fiction, Drama, Romance
+...
+...
+... Encanto
+... Byron Howard, Jared Bush
+... 2021
+... Animation, Family, Fantasy
+...
+...
+... """
+
+>>> parse(xml)
+
+{'movies': {'movie': [{'director': 'Spike Jonze',
+ 'genre': 'Science Fiction, Drama, Romance',
+ 'title': 'Her',
+ 'year': '2013'},
+ {'director': 'Byron Howard, Jared Bush',
+ 'genre': 'Animation, Family, Fantasy',
+ 'title': 'Encanto',
+ 'year': '2021'}]}}
+```
+
+## Features
+
+`quick-xmltodict` is a Rust-backed XML-to-dict conversion package that is designed to be fast and efficient.
+It has a single function, `parse`, that takes an XML string and returns a Python dictionary.
+You should be able to use this function as a drop-in replacement for the `xmltodict.parse` function from the original `xmltodict` package (used without any extra arguments).
+Like `xmltodict`, `quick-xmltodict` follows [this](https://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html) schema for converting XML to JSON.
+
+`quick-xmltodict` currently does not support namespace expansion, or the reverse operation (dict-to-XML conversion). For these features, use the original `xmltodict` package.
+
+## Performance
+
+`quick-xmltodict` is currently about 2-5 times faster than `xmltodict`.
+There are performance improvements to be made, so this difference is expected to increase.
+
+## Contributing
+
+PRs are very welcome! Please make sure to run the tests before submitting a PR.
+
+## Development
+
+This project uses [Poetry](https://python-poetry.org/) to manage the environment and Python dependencies.
+To install the development environment and run the test suite:
+```bash
+poetry install
+poetry run maturin develop
+poetry run pytest
+```
+
+Be sure to run `poetry run maturin develop` after making changes to the Rust code.
diff --git a/poetry.lock b/poetry.lock
new file mode 100644
index 0000000..33173b4
--- /dev/null
+++ b/poetry.lock
@@ -0,0 +1,141 @@
+# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand.
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+description = "Cross-platform colored terminal text."
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
+files = [
+ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
+ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
+]
+
+[[package]]
+name = "exceptiongroup"
+version = "1.2.0"
+description = "Backport of PEP 654 (exception groups)"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"},
+ {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"},
+]
+
+[package.extras]
+test = ["pytest (>=6)"]
+
+[[package]]
+name = "iniconfig"
+version = "2.0.0"
+description = "brain-dead simple config-ini parsing"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"},
+ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
+]
+
+[[package]]
+name = "maturin"
+version = "1.5.1"
+description = "Build and publish crates with pyo3, rust-cpython and cffi bindings as well as rust binaries as python packages"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "maturin-1.5.1-py3-none-linux_armv6l.whl", hash = "sha256:589e9b7024007e130b136ba6f1c2c8393a87e42cf968d12852913ab1e3c69ed3"},
+ {file = "maturin-1.5.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:a1abda07093b3c8ef897626166c02ed64e3e446c48460b28efb51833abf89cbb"},
+ {file = "maturin-1.5.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:48a1fbbdc2514525f27d6d339ab97b098ede28759f8593d110c89cc07bbe40ed"},
+ {file = "maturin-1.5.1-py3-none-manylinux_2_12_i686.manylinux2010_i686.musllinux_1_1_i686.whl", hash = "sha256:96d96b1fa3a165db9ca539f764d31da8ebc92e31ca3a1dd6ccd50008d222bd96"},
+ {file = "maturin-1.5.1-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl", hash = "sha256:786bf36a98c4e27cbebb1dc8e432c1bcbbb59e7a9719592cbb89e46a0ccd5bcc"},
+ {file = "maturin-1.5.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:d821b37da759884ad09cfee4cd9deac10f4132744cc66e4d9190a1972233bc83"},
+ {file = "maturin-1.5.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:62133bf690555bbc8cc6b1c18a0c57b0ab2b4d68d3fcd320eb16df941563fe06"},
+ {file = "maturin-1.5.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.musllinux_1_1_ppc64le.whl", hash = "sha256:6bff165252b1fcc887679ddf7b71b5cc024327ba96ea893133be38c0ed38f163"},
+ {file = "maturin-1.5.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c42a95466ffc3de0a3940cd20c57cf0c44fe5ea679375d73422afbb00236c64"},
+ {file = "maturin-1.5.1-py3-none-win32.whl", hash = "sha256:d09538b4aa0da4b59fd47cb429003b45bfd5d801714adf1db2511bf8bdea532f"},
+ {file = "maturin-1.5.1-py3-none-win_amd64.whl", hash = "sha256:a3db9054222ac79275e082b21cfd234b8e036714a4ff227a0a28f6a3ffa3744d"},
+ {file = "maturin-1.5.1-py3-none-win_arm64.whl", hash = "sha256:acf528e51413f6ae489473d64116d8c83f140386349004949d29137c16a82193"},
+ {file = "maturin-1.5.1.tar.gz", hash = "sha256:3dd834ece80edb866af18cbd4635e0ecac40139c726428d5f1849ae154b26dca"},
+]
+
+[package.dependencies]
+tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
+
+[package.extras]
+patchelf = ["patchelf"]
+zig = ["ziglang (>=0.10.0,<0.11.0)"]
+
+[[package]]
+name = "packaging"
+version = "24.0"
+description = "Core utilities for Python packages"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"},
+ {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"},
+]
+
+[[package]]
+name = "pluggy"
+version = "1.4.0"
+description = "plugin and hook calling mechanisms for python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"},
+ {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"},
+]
+
+[package.extras]
+dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
+
+[[package]]
+name = "pytest"
+version = "8.1.1"
+description = "pytest: simple powerful testing with Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pytest-8.1.1-py3-none-any.whl", hash = "sha256:2a8386cfc11fa9d2c50ee7b2a57e7d898ef90470a7a34c4b949ff59662bb78b7"},
+ {file = "pytest-8.1.1.tar.gz", hash = "sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "sys_platform == \"win32\""}
+exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
+iniconfig = "*"
+packaging = "*"
+pluggy = ">=1.4,<2.0"
+tomli = {version = ">=1", markers = "python_version < \"3.11\""}
+
+[package.extras]
+testing = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]
+
+[[package]]
+name = "tomli"
+version = "2.0.1"
+description = "A lil' TOML parser"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
+ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
+]
+
+[[package]]
+name = "xmltodict"
+version = "0.13.0"
+description = "Makes working with XML feel like you are working with JSON"
+optional = false
+python-versions = ">=3.4"
+files = [
+ {file = "xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"},
+ {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"},
+]
+
+[metadata]
+lock-version = "2.0"
+python-versions = "^3.10"
+content-hash = "24f93cc3f433ed56cd9193db740816185ffadd78c75d7c6afa93fe52fdba3258"
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..9877666
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,132 @@
+[tool.poetry]
+name = "quick-xmltodict"
+version = "0.1.0"
+description = "Efficient XML-to-dict conversion backed by Rust"
+authors = ["Daniel Hjertholm <8713259+danhje@users.noreply.github.com>"]
+package-mode = false
+
+[project]
+name = "quick-xmltodict"
+description = "Efficient XML-to-dict conversion backed by Rust"
+version = "0.1.0"
+keywords = ["xmltodict", "xml-to-dict", "xml", "fast", "rust"]
+authors = [{name = "Daniel Hjertholm", email = "8713259+danhje@users.noreply.github.com"}]
+license = {file = "LICENSE"}
+requires-python = ">=3.10"
+classifiers = [
+ "Programming Language :: Rust",
+ "Programming Language :: Python :: Implementation :: CPython",
+ "Programming Language :: Python :: Implementation :: PyPy",
+ "Programming Language :: Python :: 3",
+ "Intended Audience :: Developers",
+ "Topic :: Text Processing :: Markup :: XML",
+ "License :: OSI Approved :: MIT License",
+]
+dynamic = ["version"]
+readme = "README.md"
+
+[project.urls]
+Repository = "https://github.com/danhje/quick-xmltodict.git"
+
+[tool.poetry.dependencies]
+python = "^3.10"
+
+[tool.poetry.group.dev.dependencies]
+maturin = "*"
+pytest = "*"
+xmltodict = "*"
+
+[build-system]
+requires = ["maturin>=1.5,<2.0"]
+build-backend = "maturin"
+
+[tool.maturin]
+features = ["pyo3/extension-module"]
+
+[tool.ruff]
+target-version = "py310"
+line-length = 120
+
+[tool.ruff.lint]
+select = [
+ "A", # flake8-builtins
+ "ANN", # flake8-annotations
+ "ARG", # flake8-unused-arguments
+ "B", # flake8-bugbear
+ "C4", # flake8-comprehensions
+ "C90", # mccabe
+ "COM", # flake8-commas
+ "D", # pydocstyle
+ "DTZ", # flake8-datetimez
+ "E", "W", # pycodestyle
+ "F", # Pyflakes
+ "FLY", # flynt
+ "FURB", # refurb
+ "G", # flake8-logging-format
+ "I", # isort
+ "LOG", # flake8-logging
+ "N", # pep8-nameing
+ "NPY", # numpy specific rules
+ "PERF", # Perflint
+ "PIE", # flake8-pie
+ "RUF", # Ruff specific rules
+ "S", # flake8-bandit
+ "SIM", # flake8-simplify
+ "T20", # flake8-print
+ "TCH001", # flake8-type-checking
+ "TRY", # tryceratops
+ "UP", # pyupgrade
+ "YTT", # flake8-2020
+]
+
+ignore = ['S101', 'ANN101', 'ANN102', 'ANN401', 'TRY003', 'D100', 'D101', 'D102', 'D103', 'D104', 'D105', 'D107']
+
+# Allow autofix for all enabled rules (when `--fix`) is provided.
+fixable = ["A", "B", "C", "D", "E", "F", "G", "I", "N", "Q", "S", "T", "W", "ANN", "ARG", "BLE", "COM", "DJ", "DTZ", "EM", "ERA", "EXE", "FBT", "ICN", "INP", "ISC", "NPY", "PD", "PGH", "PIE", "PL", "PT", "PTH", "PYI", "RET", "RSE", "RUF", "SIM", "SLF", "TCH", "TID", "TRY", "UP", "YTT"]
+unfixable = []
+
+# Exclude a variety of commonly ignored directories.
+exclude = [
+ ".bzr",
+ ".direnv",
+ ".eggs",
+ ".git",
+ ".git-rewrite",
+ ".hg",
+ ".mypy_cache",
+ ".nox",
+ ".pants.d",
+ ".pytype",
+ ".ruff_cache",
+ ".src",
+ ".svn",
+ ".tox",
+ ".venv",
+ "__pypackages__",
+ "_build",
+ "buck-out",
+ "build",
+ "dist",
+ "node_modules",
+ "target",
+ "venv",
+]
+
+# Allow unused variables when underscore-prefixed.
+dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
+
+[tool.ruff.lint.pydocstyle]
+convention = "google"
+
+[tool.ruff.lint.per-file-ignores]
+"tests/test*.py" = ["ANN001", "ANN201"]
+
+[tool.ruff.lint.flake8-import-conventions]
+[tool.ruff.lint.flake8-import-conventions.aliases]
+# Declare the default aliases.
+numpy = "np"
+pandas = "pd"
+scipy = "sp"
+
+[tool.ruff.lint.isort]
+known-first-party = []
diff --git a/rustfmt.toml b/rustfmt.toml
new file mode 100644
index 0000000..7530651
--- /dev/null
+++ b/rustfmt.toml
@@ -0,0 +1 @@
+max_width = 120
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..e7bab7d
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,138 @@
+use pyo3::prelude::*;
+use pyo3::types::{PyDict, PyList, PyNone};
+use quick_xml::events::Event;
+use quick_xml::name::QName;
+use quick_xml::reader::Reader;
+
+trait QNameExt {
+ fn qn(&self) -> String;
+}
+
+impl QNameExt for QName<'_> {
+ /// Returns the qualified name of the element (prefix:local_name).
+ fn qn(&self) -> String {
+ let mut name = std::str::from_utf8(self.local_name().as_ref()).unwrap().to_string();
+ if let Some(prefix) = self.prefix() {
+ name = format!("{}:{}", std::str::from_utf8(prefix.as_ref()).unwrap(), name);
+ }
+ name
+ }
+}
+
+#[derive(Debug)]
+enum Value<'py> {
+ None,
+ Text(String),
+ Dict(&'py PyDict),
+}
+
+impl ToPyObject for Value<'_> {
+ fn to_object(&self, py: Python) -> PyObject {
+ match self {
+ Value::None => PyNone::get(py).into(),
+ Value::Text(s) => s.to_object(py),
+ Value::Dict(d) => d.to_object(py),
+ }
+ }
+}
+
+fn _update_dict<'a>(py: Python<'a>, d: &'a PyDict, tag_name: &str, value: &'a PyObject) {
+ if d.contains(tag_name).unwrap() {
+ let existing_val = d.get_item(tag_name).unwrap();
+ let list: &PyList;
+ if existing_val.unwrap().is_instance_of::() {
+ list = existing_val.unwrap().downcast::().unwrap();
+ } else {
+ list = PyList::new(py, existing_val);
+ }
+
+ list.append(value).unwrap();
+ d.set_item(tag_name, list).unwrap();
+ } else {
+ d.set_item(tag_name, value).unwrap();
+ }
+}
+
+fn _parse<'a>(py: Python<'a>, xml: &'a str) -> &'a PyDict {
+ let mut reader = Reader::from_str(xml);
+ reader.trim_text(true);
+
+ let d = PyDict::new(py);
+ loop {
+ match reader.read_event() {
+ Err(e) => panic!("Error at position {}: {:?}", reader.buffer_position(), e),
+ Ok(Event::Eof) => break,
+ Ok(Event::Empty(e)) => {
+ let tag_name = e.name().qn();
+
+ let value: Value;
+ if e.attributes().count() == 0 {
+ value = Value::None;
+ } else {
+ let attrs = PyDict::new(py);
+ for attr in e.attributes() {
+ let attr = attr.unwrap();
+ attrs
+ .set_item(format!("@{}", attr.key.qn()), attr.unescape_value().unwrap())
+ .unwrap();
+ }
+ value = Value::Dict(attrs);
+ }
+ _update_dict(py, d, &tag_name, &value.to_object(py));
+ }
+ Ok(Event::Text(e)) => {
+ let text = e.unescape().unwrap();
+ d.set_item("#text".to_string(), text).unwrap();
+ }
+ Ok(Event::Start(e)) => {
+ let tag_name = e.name().qn();
+
+ let mut value = Value::Dict(PyDict::new(py));
+ if e.attributes().count() > 0 {
+ for attr in e.attributes() {
+ let attr = attr.unwrap();
+ match value {
+ Value::Dict(d) => {
+ d.set_item(format!("@{}", attr.key.qn()), attr.unescape_value().unwrap())
+ .unwrap();
+ }
+ _ => unreachable!(),
+ }
+ }
+ }
+
+ let content = reader.read_text(e.name()).unwrap();
+ match value {
+ Value::Dict(d) => {
+ d.update(_parse(py, &content).as_mapping()).unwrap();
+ }
+ _ => unreachable!(),
+ }
+
+ match value {
+ Value::Dict(d) if d.len() == 1 && d.contains("#text").unwrap() => {
+ value = Value::Text(d.get_item("#text").unwrap().unwrap().extract::().unwrap());
+ }
+ _ => (),
+ }
+
+ _update_dict(py, d, &tag_name, &value.to_object(py));
+ }
+ _ => (),
+ }
+ }
+
+ d
+}
+
+#[pyfunction]
+fn parse(py: Python, xml: &str) -> PyResult {
+ let d = _parse(py, xml);
+ Ok(d.into())
+}
+
+#[pymodule]
+fn quick_xmltodict(_py: Python, m: &PyModule) -> PyResult<()> {
+ m.add_function(wrap_pyfunction!(parse, m)?)?;
+ Ok(())
+}
diff --git a/tests/data/forecast.json b/tests/data/forecast.json
new file mode 100644
index 0000000..63d6ecd
--- /dev/null
+++ b/tests/data/forecast.json
@@ -0,0 +1,8680 @@
+{
+ "weatherdata": {
+ "@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
+ "@xsi:noNamespaceSchemaLocation": "https://schema.api.met.no/schemas/weatherapi-0.4.xsd",
+ "@created": "2024-03-25T14:50:06Z",
+ "meta": {
+ "model": {
+ "@name": "met_public_forecast",
+ "@termin": "2024-03-25T15:00:00Z",
+ "@runended": "2024-03-25T14:36:58Z",
+ "@nextrun": "2024-03-25T15:36:58Z",
+ "@from": "2024-03-25T14:00:00Z",
+ "@to": "2024-04-04T12:00:00Z"
+ }
+ },
+ "product": {
+ "@class": "pointData",
+ "time": [
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T14:00:00Z",
+ "@to": "2024-03-25T14:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.5"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "108.4",
+ "@name": "E"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.1",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "4.1"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "60.8"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1003.1"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "72.8"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "35.6"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-5.6"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T15:00:00Z",
+ "@to": "2024-03-25T15:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "208.9",
+ "@name": "SW"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.0",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "3.4"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "61.3"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1003.0"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "86.4"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "71.9"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-5.5"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T14:00:00Z",
+ "@to": "2024-03-25T15:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T16:00:00Z",
+ "@to": "2024-03-25T16:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.4"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "213.0",
+ "@name": "SW"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.4",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "3.4"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "63.0"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1002.8"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "92.3"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "78.3"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-5.2"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T15:00:00Z",
+ "@to": "2024-03-25T16:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T17:00:00Z",
+ "@to": "2024-03-25T17:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.9"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "203.6",
+ "@name": "SW"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.3",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "3.2"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "67.3"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1002.8"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "95.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "66.1"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-4.6"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T16:00:00Z",
+ "@to": "2024-03-25T17:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.2"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T18:00:00Z",
+ "@to": "2024-03-25T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.4"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "198.0",
+ "@name": "S"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "0.7",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "2.7"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "72.9"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1002.9"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "98.2"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "95.5"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "60.7"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-4.0"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T17:00:00Z",
+ "@to": "2024-03-25T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.2"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T19:00:00Z",
+ "@to": "2024-03-25T19:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.2"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "102.3",
+ "@name": "E"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "0.5",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "1.5"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "79.4"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1003.1"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "99.3"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "95.5"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "80.5"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.3"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-2.9"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T18:00:00Z",
+ "@to": "2024-03-25T19:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T13:00:00Z",
+ "@to": "2024-03-25T19:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.2"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T20:00:00Z",
+ "@to": "2024-03-25T20:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.3"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "153.3",
+ "@name": "SE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.2",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "2.3"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "87.7"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1003.2"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "99.6"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "98.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "85.7"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.4"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-1.6"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T19:00:00Z",
+ "@to": "2024-03-25T20:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T14:00:00Z",
+ "@to": "2024-03-25T20:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.6"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.2"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T21:00:00Z",
+ "@to": "2024-03-25T21:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.3"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "166.1",
+ "@name": "S"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.6",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "2.9"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "91.3"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1003.3"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "99.8"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "91.5"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "1.9"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-1.2"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T20:00:00Z",
+ "@to": "2024-03-25T21:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.2"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T15:00:00Z",
+ "@to": "2024-03-25T21:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.7"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.2"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.4"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T22:00:00Z",
+ "@to": "2024-03-25T22:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.1"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "150.7",
+ "@name": "SE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.3",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "3.5"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "93.3"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1003.2"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.4"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "56.1"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-1.0"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T21:00:00Z",
+ "@to": "2024-03-25T22:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.2"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T16:00:00Z",
+ "@to": "2024-03-25T22:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.9"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.1"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.9"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T23:00:00Z",
+ "@to": "2024-03-25T23:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.0"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "191.2",
+ "@name": "S"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "0.8",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "2.5"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "96.8"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1003.4"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "23.2"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "47.1"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-0.6"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T22:00:00Z",
+ "@to": "2024-03-25T23:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.3"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T17:00:00Z",
+ "@to": "2024-03-25T23:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "1.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.0"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.4"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T00:00:00Z",
+ "@to": "2024-03-26T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.0"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "17.9",
+ "@name": "N"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "0.3",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "1.6"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "96.6"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1003.4"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "15.8"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "58.6"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-0.6"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T23:00:00Z",
+ "@to": "2024-03-26T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.3"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T18:00:00Z",
+ "@to": "2024-03-26T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "1.2"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.0"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.3"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T01:00:00Z",
+ "@to": "2024-03-26T01:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.1"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "116.2",
+ "@name": "SE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "0.7",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "1.5"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "95.0"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1003.2"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "3.6"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "95.5"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.8"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-1.0"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T00:00:00Z",
+ "@to": "2024-03-26T01:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.2"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T19:00:00Z",
+ "@to": "2024-03-26T01:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "1.2"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.1"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.3"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T02:00:00Z",
+ "@to": "2024-03-26T02:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.1"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "51.5",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "0.4",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "1.5"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "97.2"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1003.0"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "3.7"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "99.4"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.4"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-0.7"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T01:00:00Z",
+ "@to": "2024-03-26T02:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.3"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T20:00:00Z",
+ "@to": "2024-03-26T02:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "1.3"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.1"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.3"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T03:00:00Z",
+ "@to": "2024-03-26T03:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.2"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "23.2",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "0.4",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "1.0"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "98.3"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1002.7"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "7.2"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "99.6"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-0.7"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T02:00:00Z",
+ "@to": "2024-03-26T03:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.4"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T21:00:00Z",
+ "@to": "2024-03-26T03:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "1.6"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.2"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.1"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T04:00:00Z",
+ "@to": "2024-03-26T04:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.2"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "46.7",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "0.9",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "1.8"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "97.1"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1002.5"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "2.4"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "96.7"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-1.0"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T03:00:00Z",
+ "@to": "2024-03-26T04:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.3"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T22:00:00Z",
+ "@to": "2024-03-26T04:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "1.5"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.2"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T05:00:00Z",
+ "@to": "2024-03-26T05:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.3"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "78.0",
+ "@name": "E"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "0.6",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "2.1"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "95.2"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1002.4"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "1.4"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "75.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-1.4"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T04:00:00Z",
+ "@to": "2024-03-26T05:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.2"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-25T23:00:00Z",
+ "@to": "2024-03-26T05:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "1.4"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.3"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T06:00:00Z",
+ "@to": "2024-03-26T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.1"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "358.8",
+ "@name": "N"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "0.4",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "1.4"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "94.2"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1002.6"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.7"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "20.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "8.1"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-1.1"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T05:00:00Z",
+ "@to": "2024-03-26T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.2"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T00:00:00Z",
+ "@to": "2024-03-26T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "1.4"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.3"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.1"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T07:00:00Z",
+ "@to": "2024-03-26T07:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.4"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "89.4",
+ "@name": "E"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.3",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "2.7"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "91.1"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1002.7"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.3"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "69.7"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "61.7"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-1.3"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T06:00:00Z",
+ "@to": "2024-03-26T07:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.3"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T01:00:00Z",
+ "@to": "2024-03-26T07:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "1.4"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.3"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.4"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T08:00:00Z",
+ "@to": "2024-03-26T08:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.6"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "119.5",
+ "@name": "SE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.7",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "3.5"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "87.7"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1002.6"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.3"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "99.8"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "97.5"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "77.8"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-1.7"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T07:00:00Z",
+ "@to": "2024-03-26T08:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.2",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.5"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T02:00:00Z",
+ "@to": "2024-03-26T08:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "2.8",
+ "@minvalue": "0.0",
+ "@maxvalue": "4.2"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.3"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.6"
+ },
+ "symbol": {
+ "@id": "Snow",
+ "@number": "13",
+ "@code": "snow"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T09:00:00Z",
+ "@to": "2024-03-26T09:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.9"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "118.7",
+ "@name": "SE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.8",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "3.9"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "84.3"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1002.5"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.3"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "98.3"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "81.5"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-1.9"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T08:00:00Z",
+ "@to": "2024-03-26T09:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.2",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.7"
+ },
+ "symbol": {
+ "@id": "LightSnow",
+ "@number": "49",
+ "@code": "lightsnow"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T03:00:00Z",
+ "@to": "2024-03-26T09:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "2.1",
+ "@minvalue": "0.1",
+ "@maxvalue": "3.7"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.3"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.9"
+ },
+ "symbol": {
+ "@id": "Snow",
+ "@number": "13",
+ "@code": "snow"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T10:00:00Z",
+ "@to": "2024-03-26T10:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.1"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "88.3",
+ "@name": "E"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.6",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "3.5"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "87.7"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1002.4"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.5"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "79.7"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "78.2"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-0.9"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T09:00:00Z",
+ "@to": "2024-03-26T10:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.3",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.5"
+ },
+ "symbol": {
+ "@id": "Snow",
+ "@number": "13",
+ "@code": "snow"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T04:00:00Z",
+ "@to": "2024-03-26T10:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "1.5",
+ "@minvalue": "0.1",
+ "@maxvalue": "2.3"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.3"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.1"
+ },
+ "symbol": {
+ "@id": "Sleet",
+ "@number": "12",
+ "@code": "sleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T11:00:00Z",
+ "@to": "2024-03-26T11:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.7"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "114.0",
+ "@name": "SE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.2",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "4.2"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "83.8"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1002.0"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.1"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "62.6"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "77.4"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-0.9"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T10:00:00Z",
+ "@to": "2024-03-26T11:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.2",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.5"
+ },
+ "symbol": {
+ "@id": "LightSleet",
+ "@number": "47",
+ "@code": "lightsleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T05:00:00Z",
+ "@to": "2024-03-26T11:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "1.3",
+ "@minvalue": "0.1",
+ "@maxvalue": "2.4"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.1"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.7"
+ },
+ "symbol": {
+ "@id": "Sleet",
+ "@number": "12",
+ "@code": "sleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T12:00:00Z",
+ "@to": "2024-03-26T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.8"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "106.5",
+ "@name": "E"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.1",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "4.2"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "85.9"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1001.8"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.1"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "69.5"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "98.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-0.3"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T11:00:00Z",
+ "@to": "2024-03-26T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.3",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.5"
+ },
+ "symbol": {
+ "@id": "Sleet",
+ "@number": "12",
+ "@code": "sleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T06:00:00Z",
+ "@to": "2024-03-26T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "1.4",
+ "@minvalue": "0.1",
+ "@maxvalue": "2.7"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.4"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.8"
+ },
+ "symbol": {
+ "@id": "Sleet",
+ "@number": "12",
+ "@code": "sleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T13:00:00Z",
+ "@to": "2024-03-26T13:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.9"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "148.3",
+ "@name": "SE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.5",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "4.1"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "88.1"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1001.7"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.3"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "76.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "99.6"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.0"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T12:00:00Z",
+ "@to": "2024-03-26T13:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.3",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.7"
+ },
+ "symbol": {
+ "@id": "Sleet",
+ "@number": "12",
+ "@code": "sleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T07:00:00Z",
+ "@to": "2024-03-26T13:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "1.5",
+ "@minvalue": "0.3",
+ "@maxvalue": "2.9"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.9"
+ },
+ "symbol": {
+ "@id": "Sleet",
+ "@number": "12",
+ "@code": "sleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T14:00:00Z",
+ "@to": "2024-03-26T14:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.4"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "149.6",
+ "@name": "SE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.5",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "3.0"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "89.2"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1001.5"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.1"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "86.3"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "99.1"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.6"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T13:00:00Z",
+ "@to": "2024-03-26T14:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.2",
+ "@minvalue": "0.1",
+ "@maxvalue": "0.8"
+ },
+ "symbol": {
+ "@id": "LightSleet",
+ "@number": "47",
+ "@code": "lightsleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T08:00:00Z",
+ "@to": "2024-03-26T14:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "1.6",
+ "@minvalue": "0.5",
+ "@maxvalue": "3.2"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.9"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.4"
+ },
+ "symbol": {
+ "@id": "Sleet",
+ "@number": "12",
+ "@code": "sleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T15:00:00Z",
+ "@to": "2024-03-26T15:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.3"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "125.0",
+ "@name": "SE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.5",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "3.1"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "89.6"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1000.9"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "99.8"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "93.7"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "90.1"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.7"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T14:00:00Z",
+ "@to": "2024-03-26T15:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.1",
+ "@minvalue": "0.1",
+ "@maxvalue": "0.9"
+ },
+ "symbol": {
+ "@id": "Drizzle",
+ "@number": "46",
+ "@code": "lightrain"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T09:00:00Z",
+ "@to": "2024-03-26T15:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "1.5",
+ "@minvalue": "0.6",
+ "@maxvalue": "3.3"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.1"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.4"
+ },
+ "symbol": {
+ "@id": "Sleet",
+ "@number": "12",
+ "@code": "sleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T16:00:00Z",
+ "@to": "2024-03-26T16:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.7"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "97.9",
+ "@name": "E"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.1",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "4.1"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "86.1"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1000.4"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "99.8"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "92.8"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "95.8"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "49.9"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.5"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T15:00:00Z",
+ "@to": "2024-03-26T16:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.3",
+ "@minvalue": "0.1",
+ "@maxvalue": "1.0"
+ },
+ "symbol": {
+ "@id": "LightRain",
+ "@number": "9",
+ "@code": "rain"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T10:00:00Z",
+ "@to": "2024-03-26T16:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "1.3",
+ "@minvalue": "0.7",
+ "@maxvalue": "3.5"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.7"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.7"
+ },
+ "symbol": {
+ "@id": "Sleet",
+ "@number": "12",
+ "@code": "sleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T17:00:00Z",
+ "@to": "2024-03-26T17:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.8"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "144.6",
+ "@name": "SE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.6",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "4.8"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "89.3"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1000.5"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.1"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "99.9"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "95.2"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "12.3"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "1.1"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T16:00:00Z",
+ "@to": "2024-03-26T17:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.2",
+ "@minvalue": "0.1",
+ "@maxvalue": "1.0"
+ },
+ "symbol": {
+ "@id": "Drizzle",
+ "@number": "46",
+ "@code": "lightrain"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T11:00:00Z",
+ "@to": "2024-03-26T17:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "1.4",
+ "@minvalue": "0.7",
+ "@maxvalue": "4.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.8"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.8"
+ },
+ "symbol": {
+ "@id": "LightRain",
+ "@number": "9",
+ "@code": "rain"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T18:00:00Z",
+ "@to": "2024-03-26T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.5"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "122.9",
+ "@name": "SE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.3",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "4.9"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "90.0"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1000.6"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "98.5"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "89.3"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "85.3"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.3"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.9"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T17:00:00Z",
+ "@to": "2024-03-26T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.2",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.8"
+ },
+ "symbol": {
+ "@id": "LightRain",
+ "@number": "9",
+ "@code": "rain"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T12:00:00Z",
+ "@to": "2024-03-26T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "1.4",
+ "@minvalue": "0.7",
+ "@maxvalue": "4.4"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.9"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.8"
+ },
+ "symbol": {
+ "@id": "LightRain",
+ "@number": "9",
+ "@code": "rain"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T19:00:00Z",
+ "@to": "2024-03-26T19:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.1"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "124.3",
+ "@name": "SE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.1",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "4.1"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "89.7"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1000.6"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "99.8"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "98.7"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "81.8"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.4"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T18:00:00Z",
+ "@to": "2024-03-26T19:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.2",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.7"
+ },
+ "symbol": {
+ "@id": "Drizzle",
+ "@number": "46",
+ "@code": "lightrain"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T13:00:00Z",
+ "@to": "2024-03-26T19:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "1.1",
+ "@minvalue": "0.7",
+ "@maxvalue": "4.5"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.1"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.8"
+ },
+ "symbol": {
+ "@id": "LightRain",
+ "@number": "9",
+ "@code": "rain"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T20:00:00Z",
+ "@to": "2024-03-26T20:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.9"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "131.5",
+ "@name": "SE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.9",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "3.9"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "90.7"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1000.9"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "87.1"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.3"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T19:00:00Z",
+ "@to": "2024-03-26T20:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.2",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.7"
+ },
+ "symbol": {
+ "@id": "LightSleet",
+ "@number": "47",
+ "@code": "lightsleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T14:00:00Z",
+ "@to": "2024-03-26T20:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.9",
+ "@minvalue": "0.6",
+ "@maxvalue": "4.5"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.9"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.8"
+ },
+ "symbol": {
+ "@id": "Drizzle",
+ "@number": "46",
+ "@code": "lightrain"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T21:00:00Z",
+ "@to": "2024-03-26T21:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.7"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "99.5",
+ "@name": "E"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.2",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "3.3"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "92.1"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1001.0"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.1"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "87.6"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.4"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T20:00:00Z",
+ "@to": "2024-03-26T21:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.1",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.6"
+ },
+ "symbol": {
+ "@id": "LightSleet",
+ "@number": "47",
+ "@code": "lightsleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T15:00:00Z",
+ "@to": "2024-03-26T21:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.9",
+ "@minvalue": "0.4",
+ "@maxvalue": "3.9"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.7"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.8"
+ },
+ "symbol": {
+ "@id": "Drizzle",
+ "@number": "46",
+ "@code": "lightrain"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T22:00:00Z",
+ "@to": "2024-03-26T22:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "58.9",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.3",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "2.3"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "93.4"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1000.7"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.3"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "86.6"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.5"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T21:00:00Z",
+ "@to": "2024-03-26T22:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.2",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.7"
+ },
+ "symbol": {
+ "@id": "LightSleet",
+ "@number": "47",
+ "@code": "lightsleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T16:00:00Z",
+ "@to": "2024-03-26T22:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.9",
+ "@minvalue": "0.3",
+ "@maxvalue": "3.7"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.8"
+ },
+ "symbol": {
+ "@id": "LightSleet",
+ "@number": "47",
+ "@code": "lightsleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T23:00:00Z",
+ "@to": "2024-03-26T23:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "67.3",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.6",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "3.0"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "92.5"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1000.4"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.1"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "89.2"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.1"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.4"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T22:00:00Z",
+ "@to": "2024-03-26T23:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.2",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.6"
+ },
+ "symbol": {
+ "@id": "LightSleet",
+ "@number": "47",
+ "@code": "lightsleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T17:00:00Z",
+ "@to": "2024-03-26T23:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.9",
+ "@minvalue": "0.3",
+ "@maxvalue": "3.5"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.5"
+ },
+ "symbol": {
+ "@id": "LightSleet",
+ "@number": "47",
+ "@code": "lightsleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T00:00:00Z",
+ "@to": "2024-03-27T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.7"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "59.0",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.0",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "3.6"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "93.7"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1000.1"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.4"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "65.5"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "17.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.7"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T23:00:00Z",
+ "@to": "2024-03-27T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.2",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.4"
+ },
+ "symbol": {
+ "@id": "Sleet",
+ "@number": "12",
+ "@code": "sleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T18:00:00Z",
+ "@to": "2024-03-27T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.9",
+ "@minvalue": "0.4",
+ "@maxvalue": "2.9"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.1"
+ },
+ "symbol": {
+ "@id": "LightSleet",
+ "@number": "47",
+ "@code": "lightsleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T01:00:00Z",
+ "@to": "2024-03-27T01:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.7"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "34.3",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.6",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "4.6"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "90.3"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "999.5"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "60.8"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "39.5"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.2"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T00:00:00Z",
+ "@to": "2024-03-27T01:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.5"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T19:00:00Z",
+ "@to": "2024-03-27T01:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.9",
+ "@minvalue": "0.3",
+ "@maxvalue": "2.8"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.9"
+ },
+ "symbol": {
+ "@id": "LightSleet",
+ "@number": "47",
+ "@code": "lightsleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T02:00:00Z",
+ "@to": "2024-03-27T02:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.8"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "43.7",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.1",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "5.4"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "90.8"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "998.9"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "15.7"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "83.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.4"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T01:00:00Z",
+ "@to": "2024-03-27T02:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.3"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T20:00:00Z",
+ "@to": "2024-03-27T02:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.9",
+ "@minvalue": "0.2",
+ "@maxvalue": "2.6"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.8"
+ },
+ "symbol": {
+ "@id": "LightSleet",
+ "@number": "47",
+ "@code": "lightsleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T03:00:00Z",
+ "@to": "2024-03-27T03:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.8"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "46.0",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.6",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "6.6"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "91.7"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "998.4"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "99.9"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "14.9"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "76.8"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.5"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T02:00:00Z",
+ "@to": "2024-03-27T03:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T21:00:00Z",
+ "@to": "2024-03-27T03:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.8",
+ "@minvalue": "0.1",
+ "@maxvalue": "2.1"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.8"
+ },
+ "symbol": {
+ "@id": "LightSleet",
+ "@number": "47",
+ "@code": "lightsleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T04:00:00Z",
+ "@to": "2024-03-27T04:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.7"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "52.3",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "4.0",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "7.2"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "91.9"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "998.2"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "99.9"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "30.9"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "45.8"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.5"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T03:00:00Z",
+ "@to": "2024-03-27T04:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T22:00:00Z",
+ "@to": "2024-03-27T04:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.6",
+ "@minvalue": "0.1",
+ "@maxvalue": "1.6"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.8"
+ },
+ "symbol": {
+ "@id": "LightSleet",
+ "@number": "47",
+ "@code": "lightsleet"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T05:00:00Z",
+ "@to": "2024-03-27T05:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "48.9",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "4.0",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "7.4"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "92.1"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "998.0"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "51.3"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "21.5"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.4"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T04:00:00Z",
+ "@to": "2024-03-27T05:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-26T23:00:00Z",
+ "@to": "2024-03-27T05:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "1.3"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.8"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T06:00:00Z",
+ "@to": "2024-03-27T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.8"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "58.1",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.8",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "7.3"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "90.1"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "998.1"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "68.4"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "9.2"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.4"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T05:00:00Z",
+ "@to": "2024-03-27T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T00:00:00Z",
+ "@to": "2024-03-27T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "1.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.8"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T07:00:00Z",
+ "@to": "2024-03-27T07:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.0"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "55.2",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.9",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "7.2"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "88.8"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "998.2"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "28.1"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "38.2"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.3"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T06:00:00Z",
+ "@to": "2024-03-27T07:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T01:00:00Z",
+ "@to": "2024-03-27T07:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.6"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T08:00:00Z",
+ "@to": "2024-03-27T08:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.1"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "52.1",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.9",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "7.4"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "87.9"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "998.0"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "72.2"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "93.1"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.3"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T07:00:00Z",
+ "@to": "2024-03-27T08:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T02:00:00Z",
+ "@to": "2024-03-27T08:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.1"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T09:00:00Z",
+ "@to": "2024-03-27T09:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.2"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "54.0",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "4.1",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "7.7"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "87.1"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "997.7"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "92.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "95.3"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.3"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T08:00:00Z",
+ "@to": "2024-03-27T09:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T03:00:00Z",
+ "@to": "2024-03-27T09:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.2"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T10:00:00Z",
+ "@to": "2024-03-27T10:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.2"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "47.4",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "4.3",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "8.4"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "83.6"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "997.2"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "99.5"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "73.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "80.9"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-0.2"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T09:00:00Z",
+ "@to": "2024-03-27T10:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T04:00:00Z",
+ "@to": "2024-03-27T10:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.2"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T11:00:00Z",
+ "@to": "2024-03-27T11:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "3.2"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "53.8",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "4.0",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "8.3"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "79.3"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "997.0"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "99.9"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "99.6"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "80.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "7.1"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.0"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T10:00:00Z",
+ "@to": "2024-03-27T11:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T05:00:00Z",
+ "@to": "2024-03-27T11:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.8"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "3.2"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T12:00:00Z",
+ "@to": "2024-03-27T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.1"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "59.4",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "4.0",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "8.0"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "77.0"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "996.9"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "69.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "35.2"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.5"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T11:00:00Z",
+ "@to": "2024-03-27T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T06:00:00Z",
+ "@to": "2024-03-27T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.0"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.1"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T13:00:00Z",
+ "@to": "2024-03-27T13:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "5.6"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "63.9",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.3",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "7.9"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "77.3"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "996.9"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "77.7"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "72.7"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "1.9"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T12:00:00Z",
+ "@to": "2024-03-27T13:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T07:00:00Z",
+ "@to": "2024-03-27T13:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.1"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "5.6"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T14:00:00Z",
+ "@to": "2024-03-27T14:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "6.9"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "59.9",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.1",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "6.5"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "76.2"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "996.8"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "99.9"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "85.2"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "99.7"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "3.0"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T13:00:00Z",
+ "@to": "2024-03-27T14:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T08:00:00Z",
+ "@to": "2024-03-27T14:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.2"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "6.9"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T15:00:00Z",
+ "@to": "2024-03-27T15:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "7.4"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "55.8",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.8",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "6.0"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "75.7"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "996.6"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "99.3"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "57.6"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "94.3"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "3.4"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T14:00:00Z",
+ "@to": "2024-03-27T15:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T09:00:00Z",
+ "@to": "2024-03-27T15:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.2"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "7.4"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T16:00:00Z",
+ "@to": "2024-03-27T16:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "7.7"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "51.5",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.1",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "5.7"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "75.4"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "996.3"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "99.4"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "37.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "99.4"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "3.6"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T15:00:00Z",
+ "@to": "2024-03-27T16:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T10:00:00Z",
+ "@to": "2024-03-27T16:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "3.2"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "7.7"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T17:00:00Z",
+ "@to": "2024-03-27T17:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "7.3"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "48.6",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.7",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "5.7"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "77.2"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "996.3"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "97.1"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "72.3"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "100.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "3.5"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T16:00:00Z",
+ "@to": "2024-03-27T17:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T11:00:00Z",
+ "@to": "2024-03-27T17:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.1"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "7.7"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T18:00:00Z",
+ "@to": "2024-03-27T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "6.0"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "27.4",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.3",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "windGust": {
+ "@id": "ff_gust",
+ "@mps": "5.9"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "80.2"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "995.9"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "fog": {
+ "@id": "FOG",
+ "@percent": "0.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "87.7"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "73.5"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "99.9"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "2.9"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T17:00:00Z",
+ "@to": "2024-03-27T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T12:00:00Z",
+ "@to": "2024-03-27T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "5.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "7.7"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-28T00:00:00Z",
+ "@to": "2024-03-28T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.1"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "36.0",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.7",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "89.5"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "997.3"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "45.3"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "50.8"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "100.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "2.5"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-27T18:00:00Z",
+ "@to": "2024-03-28T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.1"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "6.7"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-28T06:00:00Z",
+ "@to": "2024-03-28T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "3.8"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "33.7",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.6",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "90.2"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "996.7"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "75.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "79.7"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "98.4"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "2.2"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-28T00:00:00Z",
+ "@to": "2024-03-28T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "3.5"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.1"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-28T12:00:00Z",
+ "@to": "2024-03-28T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "6.4"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "33.0",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.8",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "83.3"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "995.3"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "100.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "94.5"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "3.6"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-28T06:00:00Z",
+ "@to": "2024-03-28T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.7"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "3.8"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "6.7"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-28T18:00:00Z",
+ "@to": "2024-03-28T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "8.0"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "29.7",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.8",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "95.9"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "991.8"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "100.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "68.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "7.4"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-28T12:00:00Z",
+ "@to": "2024-03-28T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "2.2",
+ "@minvalue": "0.0",
+ "@maxvalue": "5.1"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "6.4"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "8.2"
+ },
+ "symbol": {
+ "@id": "LightRain",
+ "@number": "9",
+ "@code": "rain"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-29T00:00:00Z",
+ "@to": "2024-03-29T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "5.8"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "52.6",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.3",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "97.0"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "991.0"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "100.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "99.2"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "5.3"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-28T18:00:00Z",
+ "@to": "2024-03-29T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "4.5",
+ "@minvalue": "0.4",
+ "@maxvalue": "11.8"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "5.8"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "8.0"
+ },
+ "symbol": {
+ "@id": "LightRain",
+ "@number": "9",
+ "@code": "rain"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-29T06:00:00Z",
+ "@to": "2024-03-29T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.4"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "193.6",
+ "@name": "S"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.1",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "98.2"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "992.3"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "89.8"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "100.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "100.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "4.0"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-29T00:00:00Z",
+ "@to": "2024-03-29T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "2.9",
+ "@minvalue": "0.0",
+ "@maxvalue": "7.4"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.3"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "5.8"
+ },
+ "symbol": {
+ "@id": "LightRain",
+ "@number": "9",
+ "@code": "rain"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-29T12:00:00Z",
+ "@to": "2024-03-29T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "8.3"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "201.4",
+ "@name": "S"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "4.3",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "80.4"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "995.1"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "100.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "99.2"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "5.0"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-29T06:00:00Z",
+ "@to": "2024-03-29T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.4"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "8.3"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-29T18:00:00Z",
+ "@to": "2024-03-29T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "7.6"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "191.5",
+ "@name": "S"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.1",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "90.8"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "997.3"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "98.4"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "54.7"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "61.3"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "84.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "6.2"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-29T12:00:00Z",
+ "@to": "2024-03-29T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "7.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "9.2"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-30T00:00:00Z",
+ "@to": "2024-03-30T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.7"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "194.1",
+ "@name": "S"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.9",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "95.1"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1001.6"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "51.6"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "51.6"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "0.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "3.9"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-29T18:00:00Z",
+ "@to": "2024-03-30T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.5"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "7.6"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-30T06:00:00Z",
+ "@to": "2024-03-30T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "3.8"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "200.5",
+ "@name": "S"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.2",
+ "@beaufort": "1",
+ "@name": "Flau vind"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "98.4"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1003.0"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "15.2"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "37.5"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "3.5"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-30T00:00:00Z",
+ "@to": "2024-03-30T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "3.4"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.9"
+ },
+ "symbol": {
+ "@id": "PartlyCloud",
+ "@number": "3",
+ "@code": "partlycloudy_night"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-30T12:00:00Z",
+ "@to": "2024-03-30T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "9.4"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "191.3",
+ "@name": "S"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.1",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "79.3"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1005.3"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "100.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "99.6"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "6.0"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-30T06:00:00Z",
+ "@to": "2024-03-30T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "3.8"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "9.5"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-30T18:00:00Z",
+ "@to": "2024-03-30T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "7.8"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "169.9",
+ "@name": "S"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.3",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "87.6"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1006.6"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "0.8"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "49.2"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "100.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "5.9"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-30T12:00:00Z",
+ "@to": "2024-03-30T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "7.8"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "10.4"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-31T00:00:00Z",
+ "@to": "2024-03-31T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "5.1"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "30.8",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "1.7",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "95.3"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1008.5"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "98.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "63.7"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "35.9"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "4.4"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-30T18:00:00Z",
+ "@to": "2024-03-31T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "7.8"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-31T06:00:00Z",
+ "@to": "2024-03-31T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.7"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "30.1",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.0",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "94.6"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1009.9"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "100.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "39.1"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "3.8"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-31T00:00:00Z",
+ "@to": "2024-03-31T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.3"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "5.3"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-31T12:00:00Z",
+ "@to": "2024-03-31T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "9.6"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "33.9",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.3",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "80.1"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1011.1"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "94.9"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "26.2"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "6.3"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-31T06:00:00Z",
+ "@to": "2024-03-31T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.7"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "9.7"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-31T18:00:00Z",
+ "@to": "2024-03-31T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "8.3"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "21.3",
+ "@name": "N"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.6",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "86.1"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1011.0"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "82.8"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "100.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "6.1"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-31T12:00:00Z",
+ "@to": "2024-03-31T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "8.3"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "11.0"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-01T00:00:00Z",
+ "@to": "2024-04-01T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "5.0"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "28.7",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.4",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "90.6"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1011.4"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "69.1"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "23.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "10.5"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "58.6"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "3.5"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-03-31T18:00:00Z",
+ "@to": "2024-04-01T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.5"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.3"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "8.3"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-01T06:00:00Z",
+ "@to": "2024-04-01T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.2"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "30.6",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "4.0",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "84.9"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1012.3"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "94.5"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "96.9"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "1.7"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-01T00:00:00Z",
+ "@to": "2024-04-01T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "3.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "5.0"
+ },
+ "symbol": {
+ "@id": "PartlyCloud",
+ "@number": "3",
+ "@code": "partlycloudy_night"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-01T12:00:00Z",
+ "@to": "2024-04-01T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "7.0"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "33.6",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "4.1",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "72.3"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1011.1"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "92.2"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "100.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "82.8"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "2.3"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-01T06:00:00Z",
+ "@to": "2024-04-01T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.2"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "7.1"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-01T18:00:00Z",
+ "@to": "2024-04-01T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "6.1"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "30.8",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.7",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "90.6"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1009.3"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "99.2"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "96.9"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "4.6"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-01T12:00:00Z",
+ "@to": "2024-04-01T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "1.3",
+ "@minvalue": "0.0",
+ "@maxvalue": "1.6"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "6.1"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "7.8"
+ },
+ "symbol": {
+ "@id": "LightRain",
+ "@number": "9",
+ "@code": "rain"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-02T00:00:00Z",
+ "@to": "2024-04-02T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.8"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "30.7",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "4.3",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "87.7"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1009.3"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "93.7"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "95.3"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "0.8"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-01T18:00:00Z",
+ "@to": "2024-04-02T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "1.4",
+ "@minvalue": "0.0",
+ "@maxvalue": "1.7"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.8"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "6.1"
+ },
+ "symbol": {
+ "@id": "LightRain",
+ "@number": "9",
+ "@code": "rain"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-02T06:00:00Z",
+ "@to": "2024-04-02T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.6"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "28.8",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "4.4",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "78.9"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1008.9"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "100.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "53.1"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-0.8"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-02T00:00:00Z",
+ "@to": "2024-04-02T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.9"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "3.3"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-02T12:00:00Z",
+ "@to": "2024-04-02T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.7"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "32.6",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "4.7",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "68.7"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1008.3"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "97.3"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "100.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-0.8"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-02T06:00:00Z",
+ "@to": "2024-04-02T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.8"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-02T18:00:00Z",
+ "@to": "2024-04-02T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.6"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "29.8",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "3.9",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "70.9"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1006.6"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "100.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "100.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-0.4"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-02T12:00:00Z",
+ "@to": "2024-04-02T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.6"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "5.9"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-03T00:00:00Z",
+ "@to": "2024-04-03T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.5"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "26.9",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "4.6",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "71.5"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1003.7"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "63.3"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "0.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "60.9"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "32.8"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-3.4"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-02T18:00:00Z",
+ "@to": "2024-04-03T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.5"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.6"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-03T06:00:00Z",
+ "@to": "2024-04-03T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.2"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "21.0",
+ "@name": "N"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "4.4",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "76.4"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1006.4"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "88.3"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "100.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "100.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-2.7"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-03T00:00:00Z",
+ "@to": "2024-04-03T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.2"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.6"
+ },
+ "symbol": {
+ "@id": "PartlyCloud",
+ "@number": "3",
+ "@code": "partlycloudy_night"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-03T12:00:00Z",
+ "@to": "2024-04-03T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "3.4"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "24.5",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "4.1",
+ "@beaufort": "3",
+ "@name": "Lett bris"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "60.3"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1006.2"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "100.0"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "99.6"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "91.4"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-3.8"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-03T06:00:00Z",
+ "@to": "2024-04-03T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "1.2"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "3.4"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-03T18:00:00Z",
+ "@to": "2024-04-03T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.2"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "21.6",
+ "@name": "N"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.9",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "58.0"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1006.7"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "3.9"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "1.6"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "2.3"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "0.0"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-5.5"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-03T12:00:00Z",
+ "@to": "2024-04-03T18:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.2"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "3.6"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-04T00:00:00Z",
+ "@to": "2024-04-04T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.9"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "21.7",
+ "@name": "N"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.8",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "76.1"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1017.3"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "56.2"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "100.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "63.3"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-4.8"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-03T18:00:00Z",
+ "@to": "2024-04-04T00:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.9"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "2.2"
+ },
+ "symbol": {
+ "@id": "Sun",
+ "@number": "1",
+ "@code": "clearsky_night"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-04T06:00:00Z",
+ "@to": "2024-04-04T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.1"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "22.5",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.7",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "76.4"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1008.0"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "96.9"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "100.0"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "77.3"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-4.0"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-04T00:00:00Z",
+ "@to": "2024-04-04T06:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-1.1"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "0.2"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-04T12:00:00Z",
+ "@to": "2024-04-04T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "temperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.1"
+ },
+ "windDirection": {
+ "@id": "dd",
+ "@deg": "28.4",
+ "@name": "NE"
+ },
+ "windSpeed": {
+ "@id": "ff",
+ "@mps": "2.4",
+ "@beaufort": "2",
+ "@name": "Svak vind"
+ },
+ "humidity": {
+ "@unit": "percent",
+ "@value": "59.6"
+ },
+ "pressure": {
+ "@id": "pr",
+ "@unit": "hPa",
+ "@value": "1007.7"
+ },
+ "cloudiness": {
+ "@id": "NN",
+ "@percent": "100.0"
+ },
+ "lowClouds": {
+ "@id": "LOW",
+ "@percent": "85.9"
+ },
+ "mediumClouds": {
+ "@id": "MEDIUM",
+ "@percent": "97.7"
+ },
+ "highClouds": {
+ "@id": "HIGH",
+ "@percent": "39.8"
+ },
+ "dewpointTemperature": {
+ "@id": "TD",
+ "@unit": "celsius",
+ "@value": "-3.3"
+ }
+ }
+ },
+ {
+ "@datatype": "forecast",
+ "@from": "2024-04-04T06:00:00Z",
+ "@to": "2024-04-04T12:00:00Z",
+ "location": {
+ "@altitude": "90",
+ "@latitude": "59.93",
+ "@longitude": "10.72",
+ "precipitation": {
+ "@unit": "mm",
+ "@value": "0.0",
+ "@minvalue": "0.0",
+ "@maxvalue": "0.0"
+ },
+ "minTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "-0.1"
+ },
+ "maxTemperature": {
+ "@id": "TTT",
+ "@unit": "celsius",
+ "@value": "4.1"
+ },
+ "symbol": {
+ "@id": "Cloud",
+ "@number": "4",
+ "@code": "cloudy"
+ }
+ }
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/data/forecast.xml b/tests/data/forecast.xml
new file mode 100755
index 0000000..3cd18a3
--- /dev/null
+++ b/tests/data/forecast.xml
@@ -0,0 +1,2231 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/test_parse.py b/tests/test_parse.py
new file mode 100644
index 0000000..882a86c
--- /dev/null
+++ b/tests/test_parse.py
@@ -0,0 +1,109 @@
+import json
+from pathlib import Path
+
+import pytest
+from quick_xmltodict import parse as rustparse
+from xmltodict import parse as pyparse
+
+pytestmark = pytest.mark.parametrize("parse", [pyparse, rustparse])
+
+
+def test_empty(parse):
+ xml = ""
+ target = {"a": None}
+ assert parse(xml) == target
+
+
+def test_empty_with_attributes(parse):
+ xml = ''
+ target = {"e": {"@name": "value"}}
+ assert parse(xml) == target
+
+
+def test_text(parse):
+ xml = "text"
+ target = {"a": "text"}
+ assert parse(xml) == target
+
+
+def test_text_whitespace(parse):
+ xml = " text "
+ target = {"a": "text"}
+ assert parse(xml) == target
+
+
+def test_text_line_breaks(parse):
+ xml = "\ntext\n"
+ target = {"a": "text"}
+ assert parse(xml) == target
+
+
+def test_text_and_attributes(parse):
+ xml = 'text'
+ target = {"e": {"@name": "value", "#text": "text"}}
+ assert parse(xml) == target
+
+
+def test_with_children(parse):
+ xml = "12"
+ target = {"e": {"a": "1", "b": "2"}}
+ assert parse(xml) == target
+
+
+def test_identically_named_children(parse):
+ xml = "12"
+ target = {"e": {"a": ["1", "2"]}}
+ assert parse(xml) == target
+
+
+def test_more_identically_named_children(parse):
+ xml = "123"
+ target = {"e": {"a": ["1", "2", "3"]}}
+ assert parse(xml) == target
+
+
+def test_mixed_type_identically_named_children(parse):
+ xml = """
+
+
+
+ 2
+ 3
+
+ """
+ target = {"e": {"a": [None, {"@attr": "attr-1"}, "2", {"@attr": "attr-3", "#text": "3"}]}}
+ assert parse(xml) == target
+
+
+def test_elements_and_text(parse):
+ xml = "12"
+ target = {"e": {"#text": "1", "a": "2"}}
+ assert parse(xml) == target
+
+
+def test_namespace_prefixed(parse):
+ xml = """
+
+ text
+ """
+ target = {"a": {"@xmlns:ns": "http://example.com", "ns:b": "text"}}
+ assert parse(xml) == target
+
+
+@pytest.fixture
+def data_dir():
+ return Path(__file__).parent / "data"
+
+
+@pytest.fixture
+def forecast_xml(data_dir):
+ return (data_dir / "forecast.xml").read_text()
+
+
+@pytest.fixture
+def forecast_target(data_dir):
+ return json.loads((data_dir / "forecast.json").read_text())
+
+
+def test_forecast(parse, forecast_xml, forecast_target):
+ assert parse(forecast_xml) == forecast_target