How to Parse Exported JSON Containing Image Data into CSV
If you need to process metadata exported from Visual Layer, this code helps convert JSON files into CSV format.
Read Visual Layer exported json and parse it into a list of videos, video frames, their timestamp, and their category.
Here is an example json from export from VL:
{
"info": {
"schema_version": "1.1",
"dataset": "Extreme",
"description": "Exported from Extreme at Visual Layer",
"dataset_url": "http://app.visual-layer.com/dataset/42e3b7ae-dd5e-11ef-9fca-1a226f3de670/data",
"export_time": "2025-02-15T18:23:34.164184",
"dataset_creation_time": "2025-01-24T18:35:57.719308",
"exported_by": "Danny Bickson",
"total_media_items": 56
},
"media_items": [
{
"media_id": "8621054d-1d23-4ca7-a7ca-65feb2c83eb1",
"media_type": "video_frame",
"file_name": "output_000001.jpg",
"file_path": "7370082532203988000_7450129782785756438_2024-12-19_14:28:36.mp4/output_000001.jpg",
"file_size": "48.27KB",
"uniqueness_score": 0.4989460029187489,
"height": 720,
"width": 576,
"url": "http://app.visual-layer.com/dataset/42e3b7ae-dd5e-11ef-9fca-1a226f3de670/data/image/8621054d-1d23-4ca7-a7ca-65feb2c83eb1",
"cluster_id": "49997382-b7c3-4c83-83a3-fa4e0a586f2b",
"metadata_items": [
{
"type": "video_info",
"properties": {
"video_name": "7370082532203988000_7450129782785756438_2024-12-19_14:28:36.mp4",
"frame_timestamp": 0.0
}
},
{
"type": "issue",
"properties": {
"issue_type": "duplicates",
"confidence": 0.977624,
"duplicate_group_id": "35395121-5cb1-4a92-906f-dd4cb9ff62d3",
"duplicate_threshold": 0.96
}
}
// ...
]
},
{
"media_id": "09848999-125f-4be9-8850-82dc16d23459",
"media_type": "video_frame",
"file_name": "output_000001.jpg",
"file_path": "7370082532203988000_7461337604009495810_2025-01-18_19:20:39.mp4/output_000001.jpg",
"file_size": "48.11KB",
"uniqueness_score": 0.021566401816095697,
"height": 720,
"width": 576,
"url": "http://app.visual-layer.com/dataset/42e3b7ae-dd5e-11ef-9fca-1a226f3de670/data/image/09848999-125f-4be9-8850-82dc16d23459",
"cluster_id": "49997382-b7c3-4c83-83a3-fa4e0a586f2b",
"metadata_items": [
{
"type": "video_info",
"properties": {
"video_name": "7370082532203988000_7461337604009495810_2025-01-18_19:20:39.mp4",
"frame_timestamp": 0.0
}
},
{
"type": "issue",
"properties": {
"issue_type": "duplicates",
"confidence": 0.977624,
"duplicate_group_id": "35395121-5cb1-4a92-906f-dd4cb9ff62d3",
"duplicate_threshold": 0.96
}
}
// ...
]
}
// ...
]
}
Here is an example script to convert to csv
import json
import pandas as pd
import re
## Load JSON file
with open("metadata 8.json", "r") as f:
data = json.load(f)
## Prepare list for DataFrame
records = []
## Iterate over media items
for item in data.get("media_items", []):
video_name = None
frame_timestamp = None
categories = []
file_name = item.get("file_name", "")
for metadata in item.get("metadata_items", []):
if metadata["type"] == "video_info":
video_name = metadata["properties"].get("video_name")
frame_timestamp = metadata["properties"].get("frame_timestamp")
elif metadata["type"] == "image_label":
categories.append(metadata["properties"].get("category_name"))
# Extract frame number from file name
match = re.search(r'output_(\d+).jpg', file_name)
frame_number = int(match.group(1)) if match else None
# Append record with categories as a list
records.append({
"video_name": video_name,
"file_name": file_name,
"frame_number": frame_number,
"time_in_video": frame_timestamp,
"categories": categories
})
## Convert to DataFrame
df = pd.DataFrame(records)
print(df.tail())
Output:
Index | Video Name | File Name | Frame Number | Time in Video | Categories |
---|---|---|---|---|---|
51 | 7370082532203988000_7453155857585442070_2024-1... | output_000001.jpg | 1 | 0.000000 | [blanket, person, man, mountain, peak, ridge, ... |
52 | 7370082532203988000_7453516762223496470_2024-1... | output_000001.jpg | 1 | 0.000000 | [blanket, foot, hill, person, mountain, ski sl... |
53 | 7370082532203988000_7457153883383614742_2025-0... | output_000002.jpg | 2 | 8.351707 | [blue, paddle, calm, clear, float, person, lag... |
54 | 7370082532203988000_7460204779604692246_2025-0... | output_000002.jpg | 2 | 8.333333 | [blanket, person, man, mountain, stone, skier,... |
55 | 7370082532203988000_7462069977454071062_2025-0... | output_000032.jpg | 32 | 84.440002 | [blanket, building, mountain, snow, snowy, tra... |
Updated 29 days ago