如何使用jquery或javascript获取json对象的多值输入
我有如下输入标记html:如何使用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
<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);
}}