Jquery auto json to name



我的功能有问题:

function jsonToName(j){
  try {
      var obj = jQuery.parseJSON( j );
      $.each(obj,function(z,x){
        // if(jQuery.isPlainObject(x)){
        if( (typeof x === "object") && (x !== null) ){
          jsonToName(x);
        }else{
          $('[name="'+z+'"]').val(x);
        }
      });
  }
  catch (err) {
//error
  }
}

我有许多字段文本,选择等。我需要将json解析给它们值,但是有时输入值是对象,数组或json,我不知道如何转换此值。

{
  "id": 13,
  "packages_id": 4,
  "packages_price_id": 1,
  "numer": "D4X9nU",
  "property_types_id": null,
  "user_id": 1,
  "transaction_type": 1,
  "property_type": 2,
  "price": null,
  "plot_additional": null,
  "house_additional":"{"aaa":"on"}",
  "commercial_additional": "",
  "highlight_order": [],
  "renew": [
    {
      "id": 15,
      "property_id": 13,
      "order_date": "2018-02-11T13:59:59+01:00",
      "pay": false,
      "price": 59,
      "paymentKey": "GdUZ7gM1jMCKSaa61stNEmzAK9AHRoFHfA2",
      "banners_price": null
    }
  ]
}

您可以看到,我有一个更新值(对象(和house_additional(字符串json(。我尝试执行递归功能,但行不通。我的字段名称为:

<input name="numer" >
<input name="house_additional[aaa]" >
<input name="renew[pay]" >
<input name="some[some2][some3][some4][some5]" >

您不需要jQuery,我不确定为什么您要解析此JSON以外的1对需要删除的引号 - 除此之外,这是一个没有有效的对象需要解析。在下面,您会找到一个可怕的骇客来填充输入值 - 您可以更改输入名称吗?还是使用数据属性?虽然这适用于您的第3个输入("一些"不在您的JSON中,但我认为您希望在此处使用其他嵌套的其他值( - 但总的来说,这不是一个好方法 - 如果您必须去此匹配您的价值的麻烦,您的体系结构通常需要重新思考!

var j = 
{
  "id": 13,
  "packages_id": 4,
  "packages_price_id": 1,
  "numer": "D4X9nU",
  "property_types_id": null,
  "user_id": 1,
  "transaction_type": 1,
  "property_type": 2,
  "price": null,
  "plot_additional": null,
  "house_additional":{"aaa":"on"},
  "commercial_additional": "",
  "highlight_order": [],
  "renew": [
    {
      "id": 15,
      "property_id": 13,
      "order_date": "2018-02-11T13:59:59+01:00",
      "pay": false,
      "price": 59,
      "paymentKey": "GdUZ7gM1jMCKSaa61stNEmzAK9AHRoFHfA2",
      "banners_price": null
    }
  ]
}
jsonToName(j);
function jsonToName(j){
  var obj = j;
  var inputs = document.getElementsByTagName('input');
  for (var i=0; i < inputs.length;i++) {
    console.log('running loop '+i)
    var name = inputs[i].name;
    name = name.replace(/]/g,'');
    console.log('name is '+name)
    var names = name.split('[')
    var first = names[0]
    var second = names[1]
      if (j[first] && j[first][second]) {
        inputs[i].value = j[first][second]
      }
        if (j[first] && !j[first][second]) {
        inputs[i].value = j[first]
      }    
        if (j[first] && j[first][0] && !j[first][second] && j[first][0][second] != undefined) {
        inputs[i].value = j[first][0][second]
      }          
  } // end loop
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input name="numer" >
<input name="house_additional[aaa]" >
<input name="renew[pay]" >
<input name="some[some2][some3][some4][some5]" >

相关内容

最新更新