### Summary

It looks like the PR #79719 broke the support for the automatic json conversion for the `application/ld+json` and `vnd.api+json` (JSON:API spec) response header.

The earlier check: `any(candidate in sub_type for candidate in JSON_CANDIDATES)`, would return `true` for sub_type `ld+json`. However after the change in this commit, `sub_type.lower() in JSON_CANDIDATES` would return `false` for sub_type `ld+json`.

This causes the automatic loading into a key called json in the dictionary results, to not happen anymore, which of course resulted into an error in our ansible playbook: `'dict object' has no attribute 'json'`

Since `application/ld+json` seems to be a globally acknowledged content type, I would assume this should keep working.

### Issue Type

Bug Report

### Component Name

uri

### Ansible Version

```console
$ ansible --version
ansible [core 2.14.5]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.10/dist-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.10.6 (main, Mar 10 2023, 10:55:28) [GCC 11.3.0] (/usr/bin/python3)
  jinja version = 3.1.2
  libyaml = False
```


### Configuration

```console
# if using a version older than ansible-core 2.12 you should omit the '-t all'
$ ansible-config dump --only-changed -t all
CONFIG_FILE() = None
```


### OS / Environment

Windows / WSL2 / Ubuntu 20.04.5 LTS

### Steps to Reproduce

<!--- Paste example playbooks or commands between quotes below -->
```yaml (paste below)
- name: "Perform task"
  ansible.builtin.uri:
    url: "http://some_url_with_json_api_spec_formatted_response"
    method: "POST"
    body: "{{ lookup('template', './templates/some_template') }}"
    body_format: json
    status_code: 201
    headers:
      Content-Type: "application/vnd.api+json"
  register: json_api_spec_output
- name: "Record id"
  set_fact:
    response_id: "{{ json_api_spec_output.json.data.id }}"
```


### Expected Results

The id is saved into the response_id variable.

### Actual Results

```console
The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'json'.
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
- Independently of this option, if the reported Content-type is "application/json", then the JSON is
        always loaded into a key called C(json) in the dictionary results.
    type: bool
    default: no
  force_basic_auth:
    description:
      - Force the sending of the Basic authentication header upon initial request.
      - When this setting is C(false), this module will first try an unauthenticated request, and when the server replies
        with an C(HTTP 401) error, it will submit the Basic authentication header.
      - When this setting is C(true), this module will immediately send a Basic authentication header on the first
        request.
      - "Use this setting in any of the following scenarios:"
      - You know the webservice endpoint always requires HTTP Basic authentication, and you want to speed up your
        requests by eliminating the first roundtrip.
      - The web service does not properly send an HTTP 401 error to your client, so Ansible's HTTP library will not
        properly respond with HTTP credentials, and logins will fail.
      - The webservice bans or rate-limits clients that cause any HTTP 401 errors.
    type: bool
    default: no
  follow_redirects:
    description:
      - Whether or not the URI module should follow redirects. C(all) will follow all redirects.
        C(safe) will follow only "safe" redirects, where "safe" means that the client is only
        doing a GET or HEAD on the URI to which it is being redirected. C(none) will not follow
        any redirects. Note that C(true) and C(false) choices are accepted for backwards compatibility,
        where C(true) is the equivalent of C(all) and C(false) is the equivalent of C(safe). C(true) and C(false)
        are deprecated and will be removed in some future version of Ansible.
    type: str
    choices: ['all', 'no', 'none', 'safe', 'urllib2', 'yes']
    default: safe