Convertir champ d'un formulaire HTML à un objet JSON avec des objets internes
Le suivant formulaire HTML:
<form id="myform">
Company: <input type="text" name="Company" value="ACME, INC."/>
First Name: <input type="text" name="Contact.FirstName" value="Daffy"/>
Last Name: <input type="text" name="Contact.LastName" value="Duck"/>
</form>
Quelle est la meilleure façon sérialiser ce formulaire en javascript pour un objet JSON dans le format:
{
Company:"ACME, INC.",
Contact:{FirstName:"Daffy", LastName:"Duck"}
}
Notez également qu'il pourrait y avoir plus de 1 "." dans le champ nom.
- Oui, je l'ai fait pour le Printemps du Formulaire, et je l'ai fait c'est exactement la même façon, et il a bien fonctionné pour moi.
- Avez-vous l'esprit de me demander pourquoi vous êtes sérialisation JSON au lieu de simplement l'envoyer en train de comprendre le côté serveur?
- Le soumis à un service web REST qui existe sur un autre serveur.
Vous devez vous connecter pour publier un commentaire.
Je pense que ce que vous pouvez faire est ceci: pour chaque entrée, première division, le nom à la séparateurs (les caractères'.'). Maintenant, vous avez un tableau de noms. Vous pouvez alors parcourir la pile en veillant à ce que votre cible "assemblée" de l'objet (et des sous-objets) ont des récipients à chaque fois que vous tombez sur un nouveau nom de segment. Lorsque le tableau a 1 élément, il vous suffit d'ajouter la valeur.
Je viens de tri de fait que jusqu'alors il pourrait y avoir un bug ou deux; je ne me souviens pas si tous les navigateurs ont "tranche" mais je pense qu'ils le font.
(edit: j'ai oublié l'importance de l'appel à
split()
)if( $(this).attr('checked') && ('checked' == $(this).attr('checked'))) { $(this).val(true); }
Vous pouvez faire une boucle à travers les champs de formulaire par un nom, utilisez
String#split
de diviser les noms sur la dot, et de construire votre structure qui en résulte. Concept de code:Noter que cela ne vous permet pas pour les champs avec la répétition des noms (ce qui devrait créer des tableaux), ni ne élégamment face à une situation où vous utilisez les noms de "foo" et "foo.bar". Mais il devrait vous obtenir a commencé.
J'ai réussi de cette façon:
Bien sûr, cela peut être fait si vous savez ce que les noms sont, et en fait, je suis la génération de la table elle-même à l'aide de la Formation de plug-in.
J'ai créé un exemple de cette question à l'aide de la plaine js, veuillez consulter le développeur de l'outil de console pour voir l'objet de données!
jsfiddle exemple
solution:
Créer un objet de cette forme, puis d'utiliser un JSON codeur de l'écrire.