将可复制表单的JSON数据解析为PHP for Mail
我有一个表单,其中有可重复的字段,它生成以下JSON数据:
{ "mainmember": [ { "name": "testtest", "surname": "test", "id": "8509295266086", "age": "27", "gender": "Male", "townofbirth": "george", "email": "test@test.com", "contact": "0112121211", "passport": "1111111111111", "postal": "grjiubrwg", "postal_code": "0010", "residential": "tytyytyttyytyt", "residential_code": "4422" } ], "dependant1": [ { "name": "testDUP", "surname": "testDUP", "id": "4802235040081", "age": "64", "gender": "Male", "townofbirth": "tehjte", "cell": "4774811845", "email": "testDUP", "passport": "8202255133088", "relationship": "spouse" } ], "dependant2": [ { "name": "testDUP2", "surname": "testDUP2", "id": "1111111111111", "age": "45", "gender": "F", "townofbirth": "knysnasw", "cell": "0000000000", "email": "testDUP2", "passport": "2222222222222", "relationship": "inlaw" } ] }
现在可复制的字段是依赖项,在这个JSON中有2个依赖,但在复制时它增加到“dependant3,dependant4,dependant5”。
目前,当我提交并发送给PHP时,我可以计算家属:
<?php $json = $_POST['parameters']; $json_string = stripslashes($json); $data = json_decode($json_string, true); $datasetCount = count($data); // returns count of array items of any array echo "There are $datasetCount Dependants
"; $i = 0; foreach ($data as $each_dep) { $i++; echo "Dependant $i
"; while (list($key, $value) = each ($each_dep)) { echo "$key: $value
"; } } ?>
和我正在使用的jQuery发送函数:
jQuery('#submit').click(function(){ jQuery('div[class*="mainmember"]').each(function(k, v){ mainmember = {}; mainmember['id'] = ''; $(v).find('.id').each(function(){ mainmember['id'] += $(this).val(); }); mainmember['age'] = ''; $(v).find('.age').each(function(){ mainmember['age'] += $(this).val(); }); mainmember['gender'] = $(v).find('.gender').val(); result['mainmember'] = [mainmember]; }); jQuery('div[class*="dependant"]').each(function(k, v){ dep_counter++ dependants = {}; result['dependant'+dep_counter] = [dependants]; dependants['id'] = ''; $(v).find('.id').each(function(){ dependants['id'] += $(this).val(); }); dependants['age'] = ''; $(v).find('.age').each(function(){ dependants['age'] += $(this).val(); }); dependants['gender'] = $(v).find('.gender').val(); }); var jsonData = JSON.stringify(result); console.log(jsonData); });
我只是无法得到其他数据,如姓名,姓氏等。我需要像这样解析一封电子邮件:
主要成员:详情
从属2:细节
依赖3:细节
任何帮助非常感谢。
您的json结构非常痛苦,您似乎正在创建单个对象的数组。 相反,您应该拥有对象数组或键引用的单个对象。
理想情况下,对于您的结构,我认为您应该为依赖项创建一个对象数组,并为主成员创建一个对象,如下所示:
{ "mainmember": { "name": "test2", "id": "1111111111111", "age": "45", "gender": "M", "townofbirth": "knysna", "email": "tjyrrtjhe", "contact": "1111111111", "passport": "5555555555555", "postal": "yrtjyt", "postal_code": "1101", "residential": "tkyutk", "residential_code": "5555" }, "dependants": [ { "name": "dtjtet", "surname": "grwwr", "id": "1111222222222", "age": "48", "gender": "F", "townofbirth": "knmysn", "cell": "0045128588", "email": "fae@gmail.COM", "passport": "1212112111111", "relationship": "spouse" }, { "name": "dtjtet2", "surname": "grwwr2", "id": "11112222222222", "age": "44", "gender": "M", "townofbirth": "knmysn", "cell": "0045128588", "email": "fae@gmail.COM", "passport": "1212112111111", "relationship": "spouse" } ] }
这样,您就拥有一个“主成员”对象和一系列依赖项。
然后使用如下的PHP代码,您可以打印它的详细信息:
$value) { echo "$key : $value
"; } } $json = $_POST['parameters']; $json_string = stripslashes($json); $data = json_decode($json_string, true); $depCount = count($data["dependants"]); echo "There are $depCount Dependants
"; echo "Main member data:
"; printMember($data["mainmember"]); foreach ($data["dependants"] as $index => $dependant) { echo "Dependant $index
"; printMember($dependant); }
要在jquery代码中创建正确的json结构,如下所示:
jQuery('#submit').click(function(){ jQuery('div[class*="mainmember"]').each(function(k, v){ mainmember = {}; mainmember['id'] = ''; $(v).find('.id').each(function(){ mainmember['id'] += $(this).val(); }); mainmember['age'] = ''; $(v).find('.age').each(function(){ mainmember['age'] += $(this).val(); }); mainmember['gender'] = $(v).find('.gender').val(); //This is changed: Remove the [] from around the mainmember, //should be a single object not an array result['mainmember'] = mainmember; }); //create the array of dependants result['dependants'] = []; jQuery('div[class*="dependant"]').each(function(k, v){ dependant = {}; dependant['id'] = ''; $(v).find('.id').each(function(){ dependant['id'] += $(this).val(); }); dependant['age'] = ''; $(v).find('.age').each(function(){ dependant['age'] += $(this).val(); }); dependant['gender'] = $(v).find('.gender').val(); //add the dependant to the array result['dependants'].push(dependant); }); var jsonData = JSON.stringify(result); console.log(jsonData); });
这是未经测试但应该帮助您继续。 您的问题是因为您使用单个对象的数组而不是对象本身。