Skip to content

Instantly share code, notes, and snippets.

@rndme
Last active April 9, 2026 21:41
Show Gist options
  • Select an option

  • Save rndme/580d608530a0d4c87561396fd6c9523e to your computer and use it in GitHub Desktop.

Select an option

Save rndme/580d608530a0d4c87561396fd6c9523e to your computer and use it in GitHub Desktop.
turns json object/array data into literal css variables
function json2css(o, selector, blnMinify) {
if(!Array.isArray(o)) {
let sepItems = blnMinify ? "" : "\n\t",
sepLines = blnMinify ? "}\n" : ";\n}",
sepProp = blnMinify ? "" : " ";
return(`${selector||":root"}${sepProp}{${sepItems}` + Object.entries(o).map(([k, v], i) => {
return `--${k.replace(/\s/g, "-")}:${sepProp}${JSON.stringify(v).replace(/\\n/g,"\\A")}`;
}).join(`;${sepItems}`) + `${sepLines}`);
} // end if !array
return o.map(function(item, index) {
var label = selector + "_" + index;
if(selector.match(/\$1/)) label = selector.replace("$1", index);
return json2css(item, label, blnMinify);
}).join("");
} // end json2css()
/*
json2css({
"make": "Ford",
"model": "F-Series",
"category": "Truck",
"country": "USA"
}, ".cars");
returns:
.cars {
--make: "Ford";
--model: "F-Series";
--category: "Truck";
--country: "USA";
}
json2css({
"make": "Ford",
"model": "F-Series",
"category": "Truck",
"country": "USA"
}, ".cars", true);
returns:
.cars{--make:"Ford";--model:"F-Series";--category:"Truck";--country:"USA"}
json2css([{
"make": "Ford",
"model": "F-Series",
"category": "Truck",
"country": "USA"
},
{
"make": "Chevrolet",
"model": "Silverado",
"category": "Truck",
"country": "Mexico"
}], ".cars");
returns:
.cars_0 {
--make: "Ford";
--model: "F-Series";
--category: "Truck";
--country: "USA";
}.cars_1 {
--make: "Chevrolet";
--model: "Silverado";
--category: "Truck";
--country: "Mexico";
}
json2css([{
"make": "Ford",
"model": "F-Series",
"category": "Truck",
"country": "USA"
},
{
"make": "Chevrolet",
"model": "Silverado",
"category": "Truck",
"country": "Mexico"
}], "[data-car='$1']", true);
returns:
[data-car='0']{--make:"Ford";--model:"F-Series";--category:"Truck";--country:"USA"}
[data-car='1']{--make:"Chevrolet";--model:"Silverado";--category:"Truck";--country:"Mexico"}
json2css([{
"make": "Ford",
"model": "F-Series",
"category": "Truck",
"country": "USA"
},
{
"make": "Chevrolet",
"model": "Silverado",
"category": "Truck",
"country": "Mexico"
}], "$1%", true);
returns: (keyframes contents, see https://gist.github.com/rndme/f694feb576c2e79c1015ec77cc667d57 for usage)
0%{--make:"Ford";--model:"F-Series";--category:"Truck";--country:"USA"}
1%{--make:"Chevrolet";--model:"Silverado";--category:"Truck";--country:"Mexico"}
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment