forked from bblanchon/ArduinoJson
Moved JsonBuffer size calculator to https://bblanchon.github.io/ArduinoJson/
This commit is contained in:
@ -1,143 +0,0 @@
|
||||
<!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 Recipe() {
|
||||
var arrays = [];
|
||||
var objects = [];
|
||||
|
||||
this.addJsonArray = function(size) {
|
||||
if (arrays[size])
|
||||
arrays[size]++;
|
||||
else
|
||||
arrays[size] = 1;
|
||||
}
|
||||
|
||||
this.addJsonObject = function(size) {
|
||||
if (objects[size])
|
||||
objects[size]++;
|
||||
else
|
||||
objects[size] = 1;
|
||||
}
|
||||
|
||||
this.getExpression = function() {
|
||||
var elements = [];
|
||||
for (var size in arrays) {
|
||||
var count = arrays[size];
|
||||
if (count > 1)
|
||||
elements.push(count + "*JSON_ARRAY_SIZE("+size+")");
|
||||
else
|
||||
elements.push("JSON_ARRAY_SIZE("+size+")");
|
||||
}
|
||||
for (var size in objects) {
|
||||
var count = objects[size];
|
||||
if (count > 1)
|
||||
elements.push(count + "*JSON_OBJECT_SIZE("+size+")");
|
||||
else
|
||||
elements.push("JSON_OBJECT_SIZE("+size+")");
|
||||
}
|
||||
return elements.join(" + ");
|
||||
}
|
||||
}
|
||||
|
||||
function scanJson(recipe, obj) {
|
||||
if (obj instanceof Array) {
|
||||
recipe.addJsonArray(obj.length);
|
||||
for (var i = 0; i<obj.length; i++)
|
||||
scanJson(recipe, obj[i]);
|
||||
}
|
||||
else if (obj instanceof Object) {
|
||||
recipe.addJsonObject(Object.keys(obj).length);
|
||||
for (var key in obj)
|
||||
scanJson(recipe, obj[key]);
|
||||
}
|
||||
}
|
||||
|
||||
input.oninput = function(e) {
|
||||
results.style.display = 'none';
|
||||
error.style.visibility = 'hidden';
|
||||
|
||||
try {
|
||||
var recipe = new Recipe();
|
||||
scanJson(recipe, JSON.parse(input.value));
|
||||
var expression = recipe.getExpression();
|
||||
|
||||
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>
|
Reference in New Issue
Block a user