Files
ArduinoJson/scripts/buffer-size-calculator.html

108 lines
3.8 KiB
HTML
Raw Normal View History

2016-08-25 19:08:12 +02:00
<!DOCTYPE html>
<html>
<head>
<title>ArduinoJson - JsonBuffer size calculator</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div class="container">
<div class="jumbotron">
<h1>JsonBuffer size calculator</h1>
</div>
<div id='error' class="alert alert-danger" role="alert">
Please paste your JSON in the "input" box
</div>
<div class="row">
<div class="col-md-6">
<h2>Input</h2>
<textarea class="form-control" rows=30 id='input'></textarea><br>
</div>
<div id='results' class="col-md-6" style='display:none'>
<h2>Result</h2>
<h3>Expression</h3>
<p><code id='resultexpr'></code></p>
<table class="table">
<thead>
<th>Platform</th>
<th>Size (in bytes)</th>
</thead>
<tbody>
<tr>
<td>AVR 8-bit</td>
<td id='sizeavr8'></td>
</tr>
<tr>
<td>ESP8266</td>
<td id='sizeesp8266'></td>
</tr>
<tr>
<td>x86</td>
<td id='sizex86'></td>
</tr>
<tr>
<td>x64</td>
<td id='sizex64'></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</body>
<script type="text/javascript">
function getExpression(obj) {
var elements = [];
if (obj instanceof Array) {
elements.push("JSON_ARRAY_SIZE(" + obj.length + ")");
for (var i = 0; i<obj.length; i++) {
elements.push(getExpression(obj[i]))
}
}
2016-08-26 10:10:19 +02:00
else if (obj instanceof Object) {
2016-08-25 19:08:12 +02:00
elements.push("JSON_OBJECT_SIZE(" + Object.keys(obj).length + ")");
for (var key in obj) {
elements.push(getExpression(obj[key]))
}
}
return elements.filter(function(x){return x.length > 0}).join(" + ");
}
input.oninput = function(e) {
results.style.display = 'none';
error.style.visibility = 'hidden';
try {
var obj = JSON.parse(input.value);
var expression = getExpression(obj);
resultexpr.innerText = expression;
sizeavr8.innerText = eval(
"function JSON_ARRAY_SIZE(n) { return 4 + 8*n }" +
"function JSON_OBJECT_SIZE(n) { return 4 + 10*n }" +
expression
);
sizeesp8266.innerText = eval(
"function JSON_ARRAY_SIZE(n) { return 8 + 12*n }" +
"function JSON_OBJECT_SIZE(n) { return 8 + 16*n }" +
expression
);
sizex86.innerText = eval(
"function JSON_ARRAY_SIZE(n) { return 12 + 24*n }" +
"function JSON_OBJECT_SIZE(n) { return 12 + 32*n }" +
expression
);
sizex64.innerText = eval(
"function JSON_ARRAY_SIZE(n) { return 24 + 24*n }" +
"function JSON_OBJECT_SIZE(n) { return 24 + 32*n }" +
expression
);
results.style.display = 'block';
}
catch (ex) {
error.innerText = "ERROR: " + ex.message;
error.style.visibility = 'visible';
}
}
</script>
</html>