#python #json #python-3.x #parsing
#python #json #python-3.x #синтаксический анализ
Вопрос:
Я пытаюсь проанализировать следующие данные JSON, не сохраняя их в файле, используя 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"
}
]
}
]
}
}
]
}
}
]
}
}
Я использую следующий код:
import json
x = "JSON Data which is shared above"
y = json.dumps(x)
jsonDict = json.loads(y)
print (jsonDict['where'])
И не уверен, как действовать дальше, не могли бы вы посоветовать, как это можно сделать?
Я хочу получить значение всех объектов, особенно предложения where.
Комментарии:
1. Я не понимаю проблемы. Вы можете использовать загруженный json в качестве стандартного словаря python, возможно, попробуйте прочитать это для ясности, если вы не уверены, как получить данные из dict: realpython.com/python-dicts Для начала, вы можете перебрать все ключи / значения на верхнем уровне с
for key, value in jsonDict.items()
помощью .2. Ваш код не имеет никакого смысла. Почему вы это делаете
json.dumps(x)
?
Ответ №1:
json.dumps()
берет объект и кодирует его в строку JSON. Но вы пытаетесь взять строку JSON и декодировать ее в объект ( dict
в данном случае a). Поэтому метод, который вы должны применять x
, таков json.loads()
. Затем вы можете преобразовать полученный результат dict
обратно в строку JSON, y
, с 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
С принтами:
{'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'}]}]}}]}}]}
Комментарии:
1. Это не проблема. Одна из причин принять ответ — не просто присудить мне очки, но и показать людям, просматривающим вопросы, что на этот вопрос уже есть принятый ответ.