### 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
if not os.path.exists(removes):
            module.exit_json(stdout="skipped, since '%s' does not exist" % removes, changed=False)
    
    start = datetime.datetime.utcnow()
    r, info = uri(module, url, dest, body, body_format, method,
                  dict_headers, socket_timeout, ca_path, unredirected_headers,
                  decompress, ciphers, use_netrc)
    elapsed = (datetime.datetime.utcnow() - start).seconds
    if r and dest is not None and os.path.isdir(dest):
        filename = get_response_filename(r) or 'index.html'
        dest = os.path.join(dest, filename)
    if r and r.fp is not None:
        
        
        content_type, main_type, sub_type, content_encoding = parse_content_type(r)
    else:
        content_type = 'application/octet-stream'
        main_type = 'application'
        sub_type = 'octet-stream'
        content_encoding = 'utf-8'
    maybe_json = content_type and sub_type.lower() in JSON_CANDIDATES
    maybe_output = maybe_json or return_content or info['status'] not in status_code
    if maybe_output:
        try:
            if PY3 and (r.fp is None or r.closed):
                raise TypeError
            content = r.read()
        except (AttributeError, TypeError):