0

今日は半日、これに頭をぶつけてきました。JSONをネストしました。これは、最初のliで使用されているノード名をタイトルとして、各ノードを個別のolに取得して解析できるようにするためです。応答をうまく解析して反復処理することはできますが、ノードをブロックに分離するように応答を変更すると、行き詰まります。これはこれまでの私のjsです:

function parseData(obj) {
            var newId = '';
            var hashId = '#pay-data';


            $.each(obj, function(key, val) {
                if(val && typeof val === "object") {
                    $('#pay-data').append('<ol>');
                    parseData(val);
                } else {
                    console.log(key + ' - ' + val);
                    $('#pay-data').append('<li>' + key + ' - ' + val + '</li>');
                }
            });
        }

そしてこれはJSONのサンプルです:

{
"success":true,
"payAndBenefits":{
"employers":[{
    "rewards":
        {
            "totalCompensationValue":1466.95,
            "otherDeductions":141.82,
            "netPay":605.18,
            "incomeTaxes":101,
            "governmentReqd":50,
            "employerRetirementContributions":90.12,
            "employerPaidBenefits":376.83,
            "employeeRetirementContributions":102
        },
        "pay":
            {
                "paySiteURL":"https://someurl.com",
                "payPeriodEnding":"2012-09-30",
                "payDate":"2012-10-01",
                "otherDeductions":[
            {
                "description":"G T L Offset",
                "amountYTD":45,
                "amountThisPeriod":6
            },
            {
                "description":"Before Tax Dent",
                "amountYTD":-900,
                "amountThisPeriod":-147.82
            },
            {
                "description":"Checking deposit",
                "amountYTD":-6668,
                "amountThisPeriod":-605.18
            }
        ],
        "netPayYTD":6668,
        "netPayThisPeriod":605.18,
        "incomeTaxesDeductions":[
            {
                "description":"Federal Income Tax",
                "amountYTD":-909,
                "amountThisPeriod":-101
            }
        ],
        "grossPayYTD":9800,
        "grossPayThisPeriod":1000,
        "governmentRequiredDeductions":[
            {
                "description":"Social Security Tax",
                "amountYTD":-450,
                "amountThisPeriod":-50
            }
        ],
        "employeeRetirementPlanContribDeductions":[
            {
                "description":"401(k)",
                "amountYTD":-918,
                "amountThisPeriod":-102
            }
        ],
        "earnings":[
            {
            "description":"Regular",
            "amountYTD":9000,
            "amountThisPeriod":1000
            },
            {
                "description":"Vacation",
                "amountYTD":800,
                "amountThisPeriod":null
            }
        ]
    },
    "employerName":"Company Name",

ここのどこかでobject.nameを実行できるはずですが、完全に行き詰まっています。

4

2 に答える 2

1

私はあなたがこのようなものが欲しいと思います。

function parseData(obj, targetDOMElement) {

  $.each(obj, function(key, val) {

    if(val && typeof val === "object") {

      var newTarget = $('<ol>'); // create the new list item
      newTarget.append('<li>' + key + '</li>'); // append the title as you wanted
      targetDOMElement.append(newTarget);  // add it to the target container
      parseData(val, newTarget); // parse the children and set the created list as the new target

    } else {

      // or just add the key-value pair to the target
      targetDOMElement.append('<li>' + key + ' - ' + val + '</li>');

    }

  });

}
于 2012-11-29T22:36:42.193 に答える
0

すべてのliをルート要素に追加しています。

$('#pay-data').append('<li>' + key + ' - ' + val + '</li>');

代わりに、作成したolにそれらを追加する必要があります。1つの方法は、現在のオブジェクトと現在のolノードの両方を渡すようにparseData関数を変更することです。

function parseData(object, olNode) {...}

例えば:

$('#pay-data').append('<ol>');
parseData(val);

になります:

// append a new ol node and store it in nextolNode
var nextolNode=olNode.append('<ol>');
parseData(val,nextolNode);
于 2012-11-29T22:35:04.150 に答える