Learn taxonomy assembling into JSON

by Adam Patridge

HTML

<p id="output"></p>

<h2 id="product">Product</h2>
<p>This product taxonomy is used on Learn and will be used on Code Samples. Contact sabarret to request changes.</p>
<table>
<thead>
<tr>
<th>Slug</th>
<th>Name</th>
<th>Level</th>
</tr>
</thead>
<tbody>
<tr>
<td>dotnet</td>
<td>.NET</td>
<td>1</td>
</tr>
<tr>
<td>aspnet</td>
<td>ASP.NET</td>
<td>2</td>
</tr>
<tr>
<td>dotnet-core</td>
<td>.NET Core</td>
<td>2</td>
</tr>
<tr>
<td>azure</td>
<td>Azure</td>
<td>1</td>
</tr>
<tr>
<td>azure-active-directory</td>
<td>Active Directory</td>
<td>2</td>
</tr>
<tr>
<td>azure-advisor</td>
<td>Advisor</td>
<td>2</td>
</tr>
<tr>
<td>azure-cdn</td>
<td>Content Delivery Network</td>
<td>2</td>
</tr>
<tr>
<td>azure-clis</td>
<td>CLIs</td>
<td>2</td>
</tr>
<tr>
<td>azure-cloud-shell</td>
<td>Cloud Shell</td>
<td>2</td>
</tr>
<tr>
<td>azure-cognitive-services</td>
<td>Cognitive Services</td>
<td>2</td>
</tr>
<tr>
<td>azure-container-instances</td>
<td>Container Instances</td>
<td>2</td>
</tr>
<tr>
<td>azure-container-registry</td>
<td>Container Registry</td>
<td>2</td>
</tr>
<tr>
<td>azure-cosmos-db</td>
<td>Cosmos DB</td>
<td>2</td>
</tr>
<tr>
<td>azure-cost-management</td>
<td>Cost Management</td>
<td>2</td>
</tr>
<tr>
<td>azure-digital-twins</td>
<td>Digital Twins</td>
<td>2</td>
</tr>
<tr>
<td>azure-event-grid</td>
<td>Event Grid</td>
<td>2</td>
</tr>
<tr>
<td>azure-event-hubs</td>
<td>Event Hubs</td>
<td>2</td>
</tr>
<tr>
<td>azure-functions</td>
<td>Functions</td>
<td>2</td>
</tr>
<tr>
<td>azure-iot-edge</td>
<td>IoT Edge</td>
<td>2</td>
</tr>
<tr>
<td>azure-iot-hub</td>
<td>IoT Hub</td>
<td>2</td>
</tr>
<tr>
<td>azure-iot-central</td>
<td>IoT Central</td>
<td>2</td>
</tr>
<tr>
<td>azure-key-vault</td>
<td>Key Vault</td>
<td>2</td>
</tr>
<tr>
<td>azure-machine-learning-service</td>
<td>Machine Learning service</td>
<td>2</td>
</tr>
<tr>
<td>azure-machine-learning-studio</td>
<td>Machine Learning...

JavaScript

//$("#product").next().next().find("tr").filter(function (i, e) { return $(e).find("td").toArray(); }).map(function (i, e) { return "{\n\tvalue: \"" + e.find("tr:first").text() + "\"\n},\n"; }).get().join("")

var products = [];
var currentTier1 = null;
var trElements = $("#product").next().next().find("tbody tr");
for (var trElement of trElements) {
  	var $e = $(trElement);
    var product = {
    	slug: $e.find("td:nth-child(1)").text(),
      name: $e.find("td:nth-child(2)").text(),
      tier: $e.find("td:nth-child(3)").text(),
    };
    if (product.tier === "1") {
      if (currentTier1 !== null) {
      	products.push(currentTier1);
      }
    	currentTier1 = { product: product, subProducts: [] };
    }
    else if (product.tier === "2") {
      currentTier1.subProducts.push(product);
    }
}
if (currentTier1 !== null) {
  if (currentTier1 !== null) {
    products.push(currentTier1);
  }
}
var output = JSON.stringify(products);
$("#output").text(output);