Creates an array of metafield keys for a given namespace (replace "namespace" below with actual metafield namespace).
{% assign product_metafields = product.metafields["namespace"] %}
{% assign product_metafield_keys = "" | split: "" %}
{% assign keys = product_metafields | json | split: "," %}
{% for k in keys %}
{% assign key = k | split: ":" | first | remove: '"' | remove: '{' | remove: '}' %}
{% assign key = key | split: "-<-@" %}
{% assign product_metafield_keys = product_metafield_keys | concat: key %}
{% endfor %}
Once we have the keys, we can loop through them dynamically.
<h2>Specs</h2>
<ul>
{% for key in product_metafield_keys %}
<li>{{ product_metafields[key] }}</li>
{% endfor %}
</ul>