Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用jquery或javascript获取json对象的多值输入_Javascript_Jquery_Html_Json_Stringify - Fatal编程技术网

如何使用jquery或javascript获取json对象的多值输入

如何使用jquery或javascript获取json对象的多值输入,javascript,jquery,html,json,stringify,Javascript,Jquery,Html,Json,Stringify,我有如下输入标记html: <form id="info"> <input id="A" name="A" type="hidden" nodetye="parent" value="A"> <input id="A1" name="A1" type="text" nodetype="child" value="a1val"> <input id="A2" name="A2" type="text" nodetype="child

我有如下输入标记html:

<form id="info">
    <input id="A" name="A" type="hidden" nodetye="parent" value="A">
    <input id="A1" name="A1" type="text" nodetype="child" value="a1val">
    <input id="A2" name="A2" type="text" nodetype="child" value="a2val">
    <input id="B" name="B" type="hidden" nodetye="parent" value="B">
    <input id="B1" name="B1" type="text" nodetye="child" value="B1">
    <input id="B2" name="B2" type="text" nodetye="child" value="B2">
<form>
结果:

{"A":"A","A1":"a1val","A2":"a2val","B":"B","B1":"b1val","B2":"b2val"}
但我的预期结果是:

{"A":{"A1":"a1val","A2":"a2val"},"B":{"B1":"b1val","B2":"b2val"}}
您可以使用JSON编辑器在线阅读JSON。
提前感谢

您面临的问题出现了,因为您尚未编写代码来区分
'A'
'B'
等值与
'A1'
'B1'
等值。要使代码正常工作,您所需要的是:

  • 引用属性应添加到的对象的变量&
  • 一个简单的
    if
    检查将相应地引导流程
片段:

/*----JavaScript---*/
函数writeJSONfile(){
变量
/*创建一个对象*/
obj={},
/*创建引用当前对象的变量(默认值→ obj)*/
ref=obj;
/*迭代每个输入*/
$(“表单#信息:输入”)。每个(函数(){
/*缓存输入的id*/
var id=this.id;
/*检查节点类型属性是否设置为“父”*/
if(this.getAttribute(“nodetype”)=“parent”){
/*将新对象设置为属性,并将ref设置为引用该属性*/
ref=obj[id]={};
}
否则{
/*设置引用对象的输入值*/
ref[id]=$(this.val();
}
});
/*字符串化对象并返回它*/
返回JSON.stringify(obj);
}
/*创建并记录结果*/
log(writeJSONfile())

ID
的管理进行了一些更改。一个快速和简单的函数来解决你的问题

希望这就是你想要的。如果需要,乐意解释或帮助提供更好的解决方案

函数writeJSONfile(){
var obj={};
$(“.main”).each(函数(){
var mainId=this.id;
obj[this.id]={};
$(“输入”)。每个(函数(){
if($(this).hasClass(mainId)){
obj[mainId][this.id]=$(this.val();;
}
})
});
var json=json.stringify(obj);
警报(“检查”+json);
}

运行
尝试以下操作:

   function writeNodeJSON() {
       var obj = {};
       var ref = obj;
       $("form#info :input").each(function () {
           var id = this.id;
           if ($(this).attr("nodetype")==="parent") {
               obj[id] = {};
               ref = obj[id];
           } else
               ref[id] = $(this).val();
       });
       console.log(JSON.stringify(obj));
    //    alert(JSON.stringify(obj));
    //    return JSON.stringify(obj);
    }}

我按属性名“nodetype”进行检查您可以找到
nodetype
父对象的所有输入,并将
obj
对象的
id
作为键和
{}
作为值进行更新。然后使用
nodetype
作为
child
遍历所有输入元素,并将所有id作为键和值作为输入框值添加到对象中

函数writeJSONfile(){
var obj={};
$('form#info:input[nodetype=parent]')。每个(函数(){
obj[this.id]={};
})
$(“form#info:input[nodetype=child]){
if(!(obj中的this.id[0])
obj[this.id[0]]={};
obj[this.id[0]][this.id]=$(this.val();
});
var json=json.stringify(obj);
log(json);
}
writeJSONfile()

函数writeJSONfile(){
var obj={};
$(“.main”).each(函数(){
var mainId=this.id;
obj[mainId]={};
$(“+mainId).each(函数(){
obj[mainId][this.id]=$(this.val();
})
});
log(JSON.stringify(obj));
}

这样写可能有效:

函数writeJSONfile(){
调试器;
var obj={};
var children={};
$(“表单#信息:输入”)。每个(函数(){
var parent=此;
if(parent.getAttribute(“nodetype”)=“parent”){
obj[parent.id]={};
var nexts=$(父).nextAll();

对于(让我=0;如果id='A'更改为id='12'Thx Angel Politis,我会怎么做。但在你的情况下,你检查'id'的长度是正确的。在我的情况下,无法检查'id'的长度,但这可以帮助我现在非常感谢你。我将获得另一个属性来检查父级和子级。OP可以调整检查条件,以适合他们的确切情况@yajiv。我的答案作为指导。)e、 感谢@Angel Politis对我的帮助。我很高兴能帮助你@C.Tin!检查
节点类型
属性是一个好主意(我编辑了我的答案以包含它,因为它比检查
长度
更好),但请务必更正您的
HTML
,因为您提供的代码中的一些
input
元素具有
nodety
。Thx@Gerardo BLANCO。您的结果也可以使用。
   function writeNodeJSON() {
       var obj = {};
       var ref = obj;
       $("form#info :input").each(function () {
           var id = this.id;
           if ($(this).attr("nodetype")==="parent") {
               obj[id] = {};
               ref = obj[id];
           } else
               ref[id] = $(this).val();
       });
       console.log(JSON.stringify(obj));
    //    alert(JSON.stringify(obj));
    //    return JSON.stringify(obj);
    }}