mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Added JsonBuffer size calculator
This commit is contained in:
		
							
								
								
									
										108
									
								
								scripts/buffer-size-calculator.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								scripts/buffer-size-calculator.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,108 @@ | ||||
| <!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])) | ||||
|             } | ||||
|         } | ||||
|         if (obj instanceof Object) { | ||||
|             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> | ||||
		Reference in New Issue
	
	Block a user