Yup, I used JSON strings for scenes for a few years, originally on Webcore. When I moved everything into custom apps I was still using JSON strings until just a few months ago when I switched over to using maps, like this one below for my living room scenes using light level variables set from my indoor light levels app. I probably overdo it on my number of scenes I use 
[
"Dawn":[
0:[d:"Bottle Lamp",s:"off",l:"NA"],
1:[d:"Ceramic Lamp",s:"on",l:"10"],
2:[d:"Entry Stairs",s:"off",l:"NA"],
3:[d:"Living Room Ceiling",s:"on",l:"20"],
4:[d:"Standing Lamp",s:"on",l:"lLL"],
5:[d:"Table Lamp",s:"on",l:"lLL"],
6:[d:"Tree Lamp",s:"off",l:"NA"]
],
"Morning":[
0:[d:"Bottle Lamp",s:"off",l:"NA"],
1:[d:"Ceramic Lamp",s:"on",l:"25"],
2:[d:"Entry Stairs",s:"off",l:"NA"],
3:[d:"Living Room Ceiling",s:"on",l:"20"],
4:[d:"Standing Lamp",s:"on",l:"lLL"],
5:[d:"Table Lamp",s:"on",l:"lLL"],
6:[d:"Tree Lamp",s:"on",l:"50"]
],
"Day":[
0:[d:"Bottle Lamp",s:"off",l:"NA"],
1:[d:"Ceramic Lamp",s:"on",l:"mLL"],
2:[d:"Entry Stairs",s:"off",l:"NA"],
3:[d:"Living Room Ceiling",s:"on",l:"lLL-10"],
4:[d:"Standing Lamp",s:"on",l:"mLL"],
5:[d:"Table Lamp",s:"on",l:"mLL"],
6:[d:"Tree Lamp",s:"on",l:"50"]
],
"Late Evening":[
0:[d:"Bottle Lamp",s:"on",l:"mLL"],
1:[d:"Ceramic Lamp",s:"on",l:"75"],
2:[d:"Entry Stairs",s:"off",l:"NA"],
3:[d:"Living Room Ceiling",s:"on",l:"20"],
4:[d:"Standing Lamp",s:"on",l:"mLL"],
5:[d:"Table Lamp",s:"on",l:"mLL"],
6:[d:"Tree Lamp",s:"off",l:"NA"]
],
"Dinner":[
0:[d:"Bottle Lamp",s:"on",l:"mLL"],
1:[d:"Ceramic Lamp",s:"on",l:"90"],
2:[d:"Entry Stairs",s:"on",l:"15"],
3:[d:"Living Room Ceiling",s:"on",l:"20"],
4:[d:"Standing Lamp",s:"on",l:"65"],
5:[d:"Table Lamp",s:"on",l:"65"],
6:[d:"Tree Lamp",s:"on",l:"lLL"]
],
"Evening":[
0:[d:"Bottle Lamp",s:"on",l:"lLL"],
1:[d:"Ceramic Lamp",s:"on",l:"50"],
2:[d:"Entry Stairs",s:"off",l:"NA"],
3:[d:"Living Room Ceiling",s:"on",l:"20"],
4:[d:"Standing Lamp",s:"on",l:"mLL"],
5:[d:"Table Lamp",s:"on",l:"lLL"],
6:[d:"Tree Lamp",s:"on",l:"lLL"]
],
"TV Time":[
0:[d:"Bottle Lamp",s:"on",l:"25"],
1:[d:"Ceramic Lamp",s:"on",l:"25"],
2:[d:"Entry Stairs",s:"off",l:"NA"],
3:[d:"Living Room Ceiling",s:"on",l:"25"],
4:[d:"Standing Lamp",s:"on",l:"lLL"],
5:[d:"Table Lamp",s:"on",l:"lLL"],
6:[d:"Tree Lamp",s:"on",l:"25"]
],
"Dim":[
0:[d:"Bottle Lamp",s:"off",l:"NA"],
1:[d:"Ceramic Lamp",s:"on",l:"5"],
2:[d:"Entry Stairs",s:"off",l:"NA"],
3:[d:"Living Room Ceiling",s:"on",l:"20"],
4:[d:"Standing Lamp",s:"on",l:"lLL"],
5:[d:"Table Lamp",s:"on",l:"lLL"],
6:[d:"Tree Lamp",s:"off",l:"NA"]
],
"Bright":[
0:[d:"Bottle Lamp",s:"on",l:"mLL"],
1:[d:"Ceramic Lamp",s:"on",l:"100"],
2:[d:"Entry Stairs",s:"on",l:"20"],
3:[d:"Living Room Ceiling",s:"on",l:"hLL"],
4:[d:"Standing Lamp",s:"on",l:"hLL"],
5:[d:"Table Lamp",s:"on",l:"hLL"],
6:[d:"Tree Lamp",s:"on",l:"mLL"]
],
"Lamps Off":[
0:[d:"Bottle Lamp",s:"off",l:"NA"],
1:[d:"Ceramic Lamp",s:"off",l:"0"],
2:[d:"Entry Stairs",s:"off",l:"NA"],
3:[d:"Living Room Ceiling",s:"on",l:"20"],
4:[d:"Standing Lamp",s:"off",l:"NA"],
5:[d:"Table Lamp",s:"off",l:"NA"],
6:[d:"Tree Lamp",s:"off",l:"NA"]
],
"All Off":[
0:[d:"Bottle Lamp",s:"off",l:"NA"],
1:[d:"Ceramic Lamp",s:"off",l:"0"],
2:[d:"Entry Stairs",s:"off",l:"NA"],
3:[d:"Living Room Ceiling",s:"off",l:"NA"],
4:[d:"Standing Lamp",s:"off",l:"NA"],
5:[d:"Table Lamp",s:"off",l:"NA"],
6:[d:"Tree Lamp",s:"off",l:"0"]
],
"Night":[
0:[d:"Bottle Lamp",s:"off",l:"NA"],
1:[d:"Ceramic Lamp",s:"off",l:"NA"],
2:[d:"Entry Stairs",s:"off",l:"NA"],
3:[d:"Living Room Ceiling",s:"off",l:"NA"],
4:[d:"Standing Lamp",s:"off",l:"NA"],
5:[d:"Table Lamp",s:"off",l:"NA"],
6:[d:"Tree Lamp",s:"off",l:"NA"]
]
]
Map sceneMap = getSceneMap(room) // get the scenes map for room
def devices = sceneMap."${scene}".collect{entry -> entry.value} // get a map of device commands for the current room scene from the sceneMap
devices.each{device ->
if (!(device.s == "NA" && device.l == "NA")) {
def thisDevice = getRoomDevice(room, device.d)
commandDevice(thisDevice, device.s, device.l, room) // device, switch, level, room
pauseExecution(exDelay)
}
}