0

jsonデータがあり、2セットのデータ配列に分割したい1つのjsonデータは「構築」データ値の下のすべての値を保持し、2番目のjsonデータは残りのaraayと製品およびシステムの値を保持します。

JSONを2つに分割するにはどうすればよいですか?

{
    "html": [{
        "type": "fieldset",
        "caption": "Construct",
        "html": [{
            "title": "tooltip data for rk",
            "name": "rk_",
            "value": "24",
            "caption": "DNS Servers (a list of IP addresses separated by comas)",
            "type": "textarea"
        }, {
            "title": "tooltip data for rk_ntpservers",
            "name": "rk_ntpservers",
            "value": "111.11.11.11",
            "caption": " separated by comas",
            "type": "textarea"
        }, {
            "title": "tooltip data for ff_eth0_ff",
            "name": "ff_eth0_ff",
            "value": "18",
            "caption": "Public  Address (0.0.0.0 to disable)",
            "type": "text"
        }, {
            "title": "tooltip data for ff_eth0_netmask",
            "name": "ff_eth0_netmask",
            "value": "2.2.2.0",
            "caption": "Public rk Netmask",
            "type": "text"
        }, {
            "title": "tooltip data for ff_eth1_ff",
            "name": "ff_eth1_ff",
            "value": "0.0.0.0",
            "caption": "MG Device rk (0.0.0.0 to disable)",
            "type": "text"
        }, {
            "title": "tooltip data for ff_eth1_netmask",
            "name": "ff_eth1_netmask",
            "value": "2.2.2.0",
            "caption": "MG Device rk Netmask",
            "type": "text"
        }, {
            "title": "tooltip data for ff",
            "name": "ff_gateway",
            "value": "1",
            "caption": "Gateway",
            "type": "text"
        }]
    }, {
        "type": "fieldset",
        "caption": "Product",
        "html": [{
            "title": "tooltip data for product_ident",
            "name": "product_ident",
            "value": "78",
            "caption": "Product Name",
            "type": "text",
            "disabled": "disabled"
        }, {
            "title": "tooltip data for product_svnversion",
            "name": "product_svnversion",
            "value": "7916",
            "caption": "Revision",
            "type": "text",
            "disabled": "disabled"
        }]
    }, {
        "type": "fieldset",
        "caption": "System ",
        "html": [{
            "title": "tooltip data for system_license",
            "name": "system_license",
            "value": "HH",
            "caption": "License",
            "type": "text"
        }, {
            "title": "tooltip data for system_variant",
            "name": "system_variant",
            "value": "normal",
            "caption": "Variant",
            "type": "text"
        }]
    }, {
        "type": "fieldset",
        "class": "btn-fieldset",
        "caption": "",
        "html": [{
            "type": "submit",
            "id": "submitbtn",
            "class": "btn btn-primary",
            "value": "Save"
        }]
    }]
}

私の更新されたコードは今wokring

コンストラクトグループデータを出力できないようです:(。しかし、resofJSONdataを正常に出力できます。

$(document).ready(function () // don't do anything until the document is loaded.
{

    var baseUrl = "configuration.json";

    $.getJSON(baseUrl, function (data) // call getJSON providing the complete url with search term and a JSONP callback
    {
        // console.log(data.html.splice(2,3));
        // console.log("data " +data);

        console.log(data.html.splice(3, 0)); // remove and log the empty fieldset
        var constructgrp = data.html.shift(); // remove the first item (caption: "Construct")

        var restofJSONdata = data.html;
        alert(constructgrp);

        $("#demo-3-form").empty(); // clear out any previous results.
        if (data.html.length < 1) $('#demo-3-forms').html("No results. Nada. Nuttin. Zippo.");

        //$("#demo-3-form").empty(); // clear out any previous results.
        // if (data.html.length < 1) $('#demo-3-forms').html("No results. Nada. Nuttin. Zippo.");
        //   $.each(this.constructgrp, function () // iterate over the results, constructing the HTML for the display.
        // {

        var html = constructgrp.type + ' :';
        html += '<b>' + constructgrp.caption + '</b><br>';

        html += ' <br>';
        $.each(constructgrp.html, function () {
            //  alert(this.name);
            html += 'Title :' + this.title + '<br>';
            html += 'Name :' + this.name + '<br>';
            html += 'Value :' + this.value + '<br> ';
            html += 'Caption :' + this.caption + '<br><br> ';
            // html += this.type +'<br><br> ';
        });
        $('#demo-3-form').hide().append(html).fadeIn(800); // fade in the results over 2 seconds.
        // });



        $.each(restofJSONdata, function () // iterate over the results, constructing the HTML for the display.
        {

            var html = this.type + ' :';
            html += '<b>' + this.caption + '</b><br>';

            html += ' <br>';
            $.each(this.html, function () {
                //  alert(this.name);
                html += 'Title :' + this.title + '<br>';
                html += 'Name :' + this.name + '<br>';
                html += 'Value :' + this.value + '<br> ';
                html += 'Caption :' + this.caption + '<br><br> ';
                // html += this.type +'<br><br> ';
            });
            $('#demo-3-form').hide().append(html).fadeIn(800); // fade in the results over 2 seconds.
        });


    });
    //});
});

html

4

3 に答える 3

1

あなたはと混同.slice()しているようです.splice()。最初のものは配列アイテムを抽出しますが、2番目のものはそれらを削除します。多分これはあなたが望むものです:

console.log(data.html.splice(3)); // remove and log the 4th item and everything after 
var constructgrp = data.html.shift(); // remove the first item (caption: "Construct")
var restofJSONdata = data.html; // take what is left over
于 2012-12-18T23:20:51.117 に答える
0

JavaScriptのArray.reduce(...)メソッドを使用してみてください:

var splitData = data.html.reduce(function(memo, x) {
  // Pick the array of "Construct" or "Other" data.
  var arr = memo[(x.caption==='Construct' ? 'Construct' : 'Other')];
  [].push.apply(arr, x.html); // Push to it all of the items in the "html" array.
  return memo;
}, {Construct:[],Other:[]});

splitData.Construct; // => [{value:24,...}, ...]
splitData.Other;     // => [{value:78,...}, ...]

「Product」と「System」の下のアイテムのみが必要な場合(他の空のアイテムは必要ない場合)、データをプッシュするターゲット配列を選択するときに、その追加のチェックを追加する必要があることに注意してください。

于 2012-12-18T23:42:13.203 に答える
0

要素が3つしかないため、これは非常に簡単に思えます。

data.html[0] is your Construct
data.html[1] is your Product
data.html[2] is your System

したがって、たとえば、ProductとSystemの配列は単純に次のようになります。

[data.html[1],data.html[2]]

[更新]3つ以上の要素があり、最初の要素を分離する必要がある場合:

var firstElement=data.html.shift();

shift()は、配列から最初の要素を削除して返します。

于 2012-12-18T23:47:08.083 に答える