/formtojson

Primary LanguageJavaScript

HTMLFormElement to nested object literal or JSON

don't need jquery

import formToJson from "formtojson"
// or
const formToJson = require("formtojson")

//get form element
const form = document.getElementById("#exmple-form")

// to object literal
const data = formToJSON(form,/[\[\]]+/)

example

HTML

<form id="exmple-form">
        
        <!--input-->
        <input type="text" name="name" value="kei">
        <input type="number" name="age" value="42">
        
        <!-- radio -->
        <input name="sex" type="radio" value="man" checked>
        <input name="sex" type="radio" value="woman">
        
        <!-- select -->
        <select name="job">
            <option value="neet">neet</option>
            <option value="worker" selected>worker</option>
        </select>

        <!-- select multiple --> 
        <select name="hobby[]" multiple>
            <option value="music" selected>music</option>
            <option value="fishing">fishing</option>
            <option value="movie" selected>movie</option>
        </select>

        <input type="checkbox" name="private" value="true">
                        
        <!-- duplicate name="[name][]" to array -->
        <input name="child[]" type="text" value="taro">
        <input name="child[]" type="text" value="hanako">
        <input name="child[]" type="text" value="jiro">

        <!-- duplicate name="[name]" to last element value -->
        <input name="animal" type="text" value="saburo">
        <input name="animal" type="text" value="yoshiko">
        <input name="animal" type="text" value="shiro">

        <!-- nesting parse function split= /\[\]+/ -->

        <input type="text" name="other[qustion1]" value="anser1">
        <input type="text" name="other[qustion2]" value="anser2">
        <input type="text" name="other[qustion3]" value="anser3">

        <!-- like hasMany nested -->
        <input type="text" name="other2[0][qustion1]" value="anser1">
        <input type="text" name="other2[1][qustion2]" value="anser2">
        <input type="text" name="other2[2][qustion3]" value="anser3">

    </form>

script

const formToJson = require("formtojson")
const form = document.getElementById("exmple-form")
const data = formToJSON(form ,/[\[\]]+/);
/*
response data
 {
  name: 'kei',
  age: '42',
  sex: 'woman',
  job: 'worker',
  hobby: [ 'music' , 'movie'],
  private: 'true',
  child: [ 'taro', 'hanako', 'jiro' ],
  animal: 'shiro',
  other: { qustion1: 'anser1', qustion2: 'anser2', qustion3: 'anser3' },
  other2:
   [ { qustion1: 'anser1' },
     { qustion2: 'anser2' },
     { qustion3: 'anser3' } ]
}
*/