Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Extract items from json format

I am trying to extract data from json format, which also contains list of dicts. But when I access it then it shows None.

What I am trying to do:-

I am trying to get content from this below resonse

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

code.py

def extract():
    res = {
      "$schema": "http://json-schema.org/schema#",
      "anyOf": [{
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "response": {
                "type": "integer"
              },
              "content": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer"
                    },
                    "title": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id",
                    "title"
                  ]
                }
              }
            },
            "required": [
              "content",
              "response"
            ]
          }
        }
      ]
    }

    # When I try this then it shows an error
    json_ext = json.loads(res)
    print(json_ext['anyOf[0].properties'])

It returns as error

TypeError: the JSON object must be str, bytes or bytearray, not dict

I have also tried using

def deep_get_imps(data, key: str):
    split_keys = re.split("[\\[\\]]", key)
    out_data = data
    for split_key in split_keys:
        if split_key == "":
            return out_data
        elif isinstance(out_data, dict):
            out_data = out_data.get(split_key)
        elif isinstance(out_data, list):
            try:
                sub = int(split_key)
            except ValueError:
                return None
            else:
                length = len(out_data)
                out_data = out_data[sub] if -length <= sub < length else None
        else:
            return None
    return out_data


def deep_get(dictionary, keys):
    return reduce(deep_get_imps, keys.split("."), dictionary)

AS

print(deep_get(res, "anyOf[0].items[0]"))

But it returns none, It is still not getting content response.

I have many times but it is still not working. Any help would be much Appreciated. Thank You in Advance.

>Solution :

Your object, res, is a so called dict and that’s why your code throws the TypeError when you call json_ext = json.loads(res), since loads only works on strings of characters and similar types.
What you probably wanted to do is more like this:

def extract():
    res = {
          ...  # shortened for readability
    }
    print(res["anyOf"][0]["items"]["properties"]["content"])
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading