【问题标题】:Posting form using javascript and json with nested objects使用带有嵌套对象的 javascript 和 json 发布表单
【发布时间】:2011-02-13 21:15:42
【问题描述】:

我有一个具有以下结构的 html 表单:

<input type="text" name="title" />
<input type="text" name="persons[0].name" />
<input type="text" name="persons[0].color" />
<input type="text" name="persons[1].name" />
<input type="text" name="persons[1].color" />

我想把它序列化成下面的json:

{
  "title": "titlecontent",
  "persons": [{
      "name": "person0name",
      "color": "red"
    },
    {
      "name": "person1name",
      "color": "blue"
    }
  ]
}

请注意,人数可能因情况而异。

html表单的结构可以改变,但是提交的json的结构不能改变。

这怎么做最简单?

【问题讨论】:

  • 字段名称是否重要 - 即“persons[1].name”?

标签: javascript html json forms


【解决方案1】:

嘿,使用 jQuery 和 jQuery JSON plugin,我能够做到以下几点: 我不得不稍微改变一下你的 html:

<div id="Directory">
    <input type="text" class="title" />
    <span class="person 0">
        <input type="text" class="name" />
        <input type="text" class="color" />
    </span>
    <span class="person 1">
        <input type="text" class="name" />
        <input type="text" class="color" />
    </span>
</div>

然后我可以使用以下代码创建您的 JSON 数组:

var Directory = {};
Directory.title = $("div#Directory input.title").val();
Directory.persons = [];
$("div#Directory span.person").each(function() {
  var index = $(this).attr("class").split(" ")[1];
  Directory.persons.push({
    name: "person" + index + $(this).children("input.name").val(),
    color: $(this).children("input.color").val(),
  });
});
alert($.toJSON(Directory));

这个 http://stackoverflow.com/questions/492833/getting-correct-index-from-input-array-in-jquery 也有点帮助。不幸的是,我无法使用您的特定属性集复制他们的选择方法。

希望我没有做你的功课;)上面的 URL 中有一个空格,因为我没有足够的声誉点来放置多个超链接。

这是你的最终 JSON:

{
  "title": "abc",
  "persons": [{
    "name": "person0englishman",
    "color": "pink"
  }, {
    "name": "person1indian",
    "color": "brown"
  }]
}

【讨论】:

  • 这没有提供对所请求问题的答案,您提供了一种解决方法。看我的回答。
【解决方案2】:

依赖:

  • locutus (npm install locutus)
  • jQuery

代码:

var parse_str = require('locutus/php/strings/parse_str');
parse_str($("#form ID").serialize(), var result = {});
console.log(result);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多