Изменение формата файла JSON с помощью PythonPython

Программы на Python
Ответить
Anonymous
 Изменение формата файла JSON с помощью Python

Сообщение Anonymous »

У меня есть код Python, который создает для меня json в этом формате
{
"name": "Databases",
"children": [
{
"name": "Virtual prototyping",
"children": [
{
"name": "Mechanical engineering",
"children": [
{
"name": "Engineering",
"children": []
}
]
},
{
"name": "Simulation",
"children": [
{
"name": "Computer science",
"children": []
}
]
}
]
}
]
}

но мне бы хотелось, чтобы этот формат вывода в формате json был таким:
основанным узлом являются базы данных
"Машиностроение" и "Моделирование" дети «Инжиниринга».
«Моделирование» также является потомком «информатики».
«Виртуальное прототипирование» является потомком как «Машиностроения», так и «Моделирования».
Структура должен строиться динамически на основе отношений, определенных в моем наборе данных, без жесткого кодирования конкретных значений.
@app.route('/api/search', methods=['GET'])
@cache.cached(timeout=60, query_string=True)
def search_concept():
search_term = request.args.get('term')
if not search_term:
return jsonify({"error": "No search term provided"}), 400

try:
# Step 1: Fetch the main concept
with get_db_connection() as conn:
query = """
SELECT display_name
FROM concepts_filtered_fts
WHERE display_name MATCH ?;
"""
df = pd.read_sql(query, con=conn, params=[search_term])

if df.empty:
return jsonify({"message": "No results found."}), 404

results = {
"name": "databases", # Root node
"children": [] # This will hold all database nodes
}

# Process each main concept
for index, row in df.iterrows():
database_node = {
"name": row['display_name'], # Database name
"children": [] # This will hold related topics (nodes)
}

visited = set() # Set to track visited nodes
if not build_hierarchy(database_node, row['display_name'], visited):
logging.warning(f"Circular reference detected for concept: {row['display_name']}")
continue # Skip this node if circular reference is detected

results["children"].append(database_node)

return jsonify(results), 200

except Exception as e:
logging.error(f"Error in /api/search: {e}")
return jsonify({"error": str(e)}), 500

def get_related_topics(concept):
try:
with get_db_connection() as conn:
query = """
SELECT parent_display_names
FROM concepts_filtered
WHERE display_name = ?;
"""
df_related = pd.read_sql(query, con=conn, params=[concept])

if df_related.empty or df_related['parent_display_names'].iloc[0] is None:
return [] # Return empty if no parents found

related_topics = df_related['parent_display_names'].iloc[0].split(',')
return [topic.strip() for topic in related_topics] # Clean up whitespace

except Exception as e:
logging.error(f"Error fetching related topics for {concept}: {e}")
return []

Я не уверен, как мне изменить код, чтобы добиться этой структуры, и мне хотелось бы знать, как это лучше сделать, поскольку у меня более 100 000 записей?
p>
Я пробую различные изменения в своем коде Python, но мне все равно не удалось достичь желаемого формата, и вот пример ожидаемого результата
{
"name": "Databases",
"children": [
{
"name": "Engineering",
"children": [
{
"name": "Mechanical engineering",
"children": [
{
"name": "Virtual prototyping",
"children": []
}
]
}
]
},
{
"name": "Computer science",
"children": [
{
"name": "Simulation",
"children": [
{
"name": "Virtual prototyping",
"children": []
}
]
}
]
}
]
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... ith-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»