简体   繁体   中英

Parse the complex JSON in Python without storing in File

I'm trying the parse the following JSON data without storing it in a file, using Python.

{
  "select": {
    "value": "s_name"
  },
  "from": "student",
  "where": {
    "in": [
      "s_id",
      {
        "select": {
          "value": "s_id"
        },
        "from": "student_course",
        "where": {
          "in": [
            "c_id",
            {
              "select": {
                "value": "c_id"
              },
              "from": "course",
              "where": {
                "or": [
                  {
                    "and": [
                      {
                        "eq": [
                          "c_name",
                          {
                            "literal": "DSA"
                          }
                        ]
                      },
                      {
                        "eq": [
                          "c_name",
                          {
                            "literal": "dbms"
                          }
                        ]
                      }
                    ]
                  },
                  {
                    "eq": [
                      "c_name",
                      {
                        "literal": "algorithm"
                      }
                    ]
                  }
                ]
              }
            }
          ]
        }
      }
    ]
  }
}

I'm using the following code:

import json

x = "JSON Data which is shared above"
y = json.dumps(x)
jsonDict = json.loads(y)
print (jsonDict['where'])

And not sure, how to proceed further, could you please advise, how it can be done? I want to fetch the value of all objects, especially where clause.

json.dumps() takes an object and encodes it into a JSON string. But you are trying to take a JSON string and decode it into an object (a dict in this case). The method you should be applying against x therefore is json.loads() . You can then convert the resulting dict back into a JSON string, y , with json.dumps() :

import json


x = """{
  "select": {
    "value": "s_name"
  },
  "from": "student",
  "where": {
    "in": [
      "s_id",
      {
        "select": {
          "value": "s_id"
        },
        "from": "student_course",
        "where": {
          "in": [
            "c_id",
            {
              "select": {
                "value": "c_id"
              },
              "from": "course",
              "where": {
                "or": [
                  {
                    "and": [
                      {
                        "eq": [
                          "c_name",
                          {
                            "literal": "DSA"
                          }
                        ]
                      },
                      {
                        "eq": [
                          "c_name",
                          {
                            "literal": "dbms"
                          }
                        ]
                      }
                    ]
                  },
                  {
                    "eq": [
                      "c_name",
                      {
                        "literal": "algorithm"
                      }
                    ]
                  }
                ]
              }
            }
          ]
        }
      }
    ]
  }
}"""

jsonDict = json.loads(x) # from string to a dict
print(jsonDict['where'])
y = json.dumps(jsonDict) # from dict back to a string

Prints:

{'in': ['s_id', {'select': {'value': 's_id'}, 'from': 'student_course', 'where': {'in': ['c_id', {'select': {'value': 'c_id'}, 'from': 'course', 'where': {'or': [{'and': [{'eq': ['c_name', {'literal': 'DSA'}]}, {'eq': ['c_name', {'literal': 'dbms'}]}]}, {'eq': ['c_name', {'literal': 'algorithm'}]}]}}]}}]}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM