Créer un objet JSON à partir de code HTML à l'aide de jQuery

Vue D'Ensemble Des Problèmes

Disons que j'ai un colis de bonbons. L'envoi a un certain nombre de cases, et chaque boîte a un certain nombre de types de bonbons. Chaque zone possède un identifiant unique, différent de tous les autres; le même est vrai pour les types de bonbons. En outre, un bonbon a d'autres traits, comme la couleur, la saveur et la quantité.

Exemple De Code

Prendre le code HTML suivant exemple:

<div class="shipment">
    <div class="box" data-boxid="a">
        <div class="candy" data-candyid="1" data-color="orange" data-flavor="orange" data-qty="7">
            <!-- unimportant content -->
        </div>
        <div class="candy" data-candyid="2" data-color="red" data-flavor="strawberry" data-qty="4">
            <!-- unimportant content -->
        </div>
    </div>
    <div class="box" data-boxid="b">
        <div class="candy" data-candyid="3" data-color="green" data-flavor="lime">
            <!-- unimportant content -->
        </div>
    </div>
</div>

Précédentes Tentatives

J'ai vu des exemples similaires de tableau d'analyse avec jQuery .map() fonction, et j'ai aussi vu de mention de .each(), mais j'ai été incapable de générer un code de travail.

De Sortie Désiré

Je veux générer (avec jQuery) un objet JSON similaire à la suivante:

{
    "shipment": {
        "a": {
            "1": {
                "color": "orange",
                "flavor": "orange",
                "qty": "7"
            },
            "2": {
                "color": "red",
                "flavor": "strawberry",
                "qty": "4"
            }
        },
        "b": {
            "3": {
                "color": "green",
                "flavor": "lime"
            }
        }
    }
}

Notes Complémentaires

Mon application utilise déjà jQuery largement, de sorte qu'il ressemble à une logique de l'outil pour le travail. Toutefois, si la plaine de 'ol JavaScript est un choix plus approprié, n'hésitez pas à le dire.

Le HTML est toujours va être bien formé et toujours allez suivre le format spécifié. Toutefois, dans certains cas, l'information peut être incomplète. Noter que le tiers des bonbons a pas de quantité indiquée, de sorte que la quantité a été tout simplement ignorés lors de la construction de l'objet.

Une combinaison de .each() et .find() devrait faire l'affaire. Commencer par le haut et de travailler votre chemin à l'intérieur des propriétés.
J'ai essayé quelque chose de similaire, mais je crois que j'ai rencontré le travail avec les enfants des enfants (par exemple, imbriqués .each() fonctions). Pourriez-vous s'il vous plaît poster un exemple? Je ne suis pas nécessairement en demandant une solution complète (après tout, c'est un exemple fictif). Juste une étape dans la bonne direction.

OriginalL'auteur Peter | 2013-03-28