About the marshmallow package
- It checks if your data has the correct fields.
- It verifies that each field has the right type.
- It helps you validate JSON before using it.
- It can convert Python data into clean JSON.
About your this source code:
- It loads the marshmallow package when the app starts.
- It reads the JSON you type in the input box.
- It tries to convert that text into Python data.
- It validates the data using your marshmallow schema.
- It shows the result or the error directly in the output box.
- It does not use print or message boxes.
Why this tool is useful
- You can test JSON visually.
- You can see validation errors instantly.
- You avoid console output.
- You keep everything inside the GUI.

Let's see the sourve code:
import json
import tkinter as tk
from tkinter import ttk
# ------------------ Package Load Test ------------------
try:
from marshmallow import Schema, fields, ValidationError
package_status = "Package marshmallow loaded successfully."
except Exception as e:
package_status = "PACKAGE LOAD ERROR: " + str(e)
# ------------------ Marshmallow Schema ------------------
class PersonSchema(Schema):
full_name = fields.Str(required=True)
city = fields.Str(required=True)
birth_date = fields.Date(required=True)
nicknames = fields.List(fields.Str(), required=True)
schema = PersonSchema()
# ------------------ Tkinter UI ------------------
def process_json():
raw = editor.get("1.0", tk.END).strip()
output.delete("1.0", tk.END)
# Step 1: package status
output.insert(tk.END, package_status + "\n\n")
# Step 2: show raw JSON
output.insert(tk.END, "RAW JSON RECEIVED:\n" + raw + "\n\n")
# Step 3: JSON parsing
try:
data = json.loads(raw)
output.insert(tk.END, "JSON PARSED OK.\n\n")
except Exception as e:
output.insert(tk.END, "JSON ERROR:\n" + str(e))
return
# Step 4: Marshmallow validation
try:
result = schema.dump(data)
output.insert(tk.END, "SCHEMA VALIDATION OK.\n\n")
except ValidationError as e:
output.insert(tk.END, "SCHEMA ERROR:\n" + json.dumps(e.messages, indent=2))
return
# Step 5: Final result
output.insert(tk.END, "FINAL RESULT:\n" + json.dumps(result, indent=2))
root = tk.Tk()
root.title("Marshmallow Diagnostic Full Output")
root.geometry("750x550")
frm = ttk.Frame(root, padding=10)
frm.pack(fill="both", expand=True)
ttk.Label(frm, text="JSON Input:").pack(anchor="w")
editor = tk.Text(frm, height=14, width=90)
editor.pack(fill="x")
editor.insert(
tk.END,
json.dumps(
{
"full_name": "Catalin George Festila",
"city": "Falticeni",
"birth_date": "1976-03-07",
"nicknames": ["catafest", "mythcat"]
},
indent=2
)
)
ttk.Button(frm, text="Run", command=process_json).pack(pady=10)
ttk.Label(frm, text="Output:").pack(anchor="w")
output = tk.Text(frm, height=14, width=90)
output.pack(fill="both", expand=True)
root.mainloop()