CSV 2 JSON -> FancyGrid output
by mhouser_nowmediagroup
HTML
<script src="https://cdn.fancygrid.com/fancy.min.js"></script>
<div id="container"></div>
JavaScript
document.addEventListener("DOMContentLoaded", function() {
function str_fix(str) {
var count = -1
var new_str = ""
while (str[++count])
if (str[count] == ' ')
new_str += '_'
else
new_str += str[count]
return String(new_str)
}
function parseCSV(csv) {
var topline = ""
var data = []
var count = -1
let length = csv.length
while (csv[++count] != '\n') {
while (csv[count] == ',' && csv[count + 1] == ',')
count++
topline += csv[count]
}
topline = topline.split(',')
var items = topline.length
while (count + 1 < length) {
var current_str = ""
var current_count = items
var values = {}
while (count + 1 < length && csv[++count] != '\n') {
while (csv[count] == ',' && csv[count + 1] == ',')
count++
current_str += csv[count]
}
current_str = current_str.split(',')
while (current_count--)
values[str_fix(topline[current_count])] = current_str[current_count]
data.push(values)
}
return data
}
function outputTable(data) {
new FancyGrid({
title: 'JSON Data',
renderTo: 'container',
width: document.body.clientWidth - (document.body.clientWidth * 0.1),
height: 400,
data: data,
defaults: {
type: 'string',
width: document.body.clientWidth / 4,
sortable: true
},
columns: [{
index: 'State_Name',
locked: true,
title: 'State Name'
}, {
index: 'ST',
title: 'State'
}, {
index: 'Zip_Min',
title: 'Min',
type: 'number'
}, {
index: 'Zip_Max',
title: 'Max',
type: 'number'
}]
});
window.alert("You made it!")
}
fetch('https://mjhd.me/zip_ranges.csv')
.then(function(response) {
return response.text()
})
.then(function(csv) {
data = parseCSV(csv)
outputTable(data)
...