• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

JSON umwandeln

Andre1985

New member
Hallo zusammen,
ich brauche mal eure Unterstützung da ich selber auf dem Schlauch stehe.

Ich möchte folgende Struktur:

Code:
[{
        identifier: "AGENT.DISPLAYS.VISUSTRUCT.Regonialbereich",
        name: "Regonialbereich",
        sub: [{
            name: "TestA",
            identifier: "AGENT.DISPLAYS.VISUSTRUCT.Regonialbereich.TestA",
            display: "AGENT.DISPLAYS.VISUSTRUCT.Regonialbereich.TestA"
        }]
    }, {
        identifier: "AGENT.DISPLAYS.VISUSTRUCT.RegonialbereichB",
        name: "RegonialbereichB",
        sub: [{
            display: "AGENT.DISPLAYS.VISUSTRUCT.RegonialbereichB.TestB"
            identifier: "AGENT.DISPLAYS.VISUSTRUCT.RegonialbereichB.TestB"
            name: "TestB"
        }]
    }
}]

Diese würde ich gerne in eine solche Struktur wandeln:

Code:
var data = [
    {
        name: 'node1', id: 1,
        children: [
            { name: 'child1', id: 2 },
            { name: 'child2', id: 3 }
        ]
    },
    {
        name: 'node2', id: 4,
        children: [
            { name: 'child3', id: 5 }
        ]
    }
];

Ziel ist es die obere Struktur in einer Treeview darzustellen. Die Subs können beliebig verschachtelt sein. Subs sind einfach Ordner.
Leider scheitere ich immer daran die Children hinzufügen. Ich hab versucht es rekursiv zu lösen jedoch hab ich dann immer einen Knoten im Kopf.

Ich hoffe hier könnt mir helfen. Ich wäre euch sehr dankbar.

Gruß
André
 
Ich finde die Werte aus der Zielstruktur nicht in der Quellstruktur. Wo kommen die her? Also z. B. child3 oder node2. Wie werden die gebildet?
 
Ja, vielleicht sollte ich diese Details auch erwähnen. Sorry :-/

So

Code:
 {
        name: 'Regonialbereich', id: 1,
        children: [
            { name: 'TestA', id: 2 },
        ]
    },
    {
        name: 'RegonialbereichB', id: 4,
        children: [
            { name: 'TestB', id: 5 }
        ]
    }

Ziel soll halt das hier sein: JqTree - JSFiddle

Wobei Regionalbereich oder RegionalbereichB wieder Unterordner erhalten könnten.
 
Code:
var xxx = [{
        identifier: "AGENT.DISPLAYS.VISUSTRUCT.Regonialbereich",
        name: "Regonialbereich",
        sub: [{
            name: "TestA",
...

function transform(elem, id)
{
  var id = id || { id: 1 };
  return elem.map(function(elem)
  {
    var ret = {
      name: elem.name,
      id: id.id++
    };
    if (elem.sub)
    {
      ret.children = transform(elem.sub, id);
    }
    return ret;
  });
};

var yyy = transform(xxx);
 
stimmt, wenn man es zu einer normalen Zahl macht, funktioniert der rekursive Ansatz nicht mehr.

Ich würde das ja so machen:
Code:
function transform(elem){
	id = 0;
	function iterate(elem){
		return elem.map(function(elem){
			id += 1;
			var ret = {
				name: elem.name,
				id: id
			};
			if (elem.sub){
				ret.children = iterate(elem.sub);
			}
			return ret;
		});
	}
	return iterate(elem);
}
- macht es in meinen Augen klarer, dass id sowas wie eine quasi-globale Variable in der Rekursion ist.
 
Hier mal aus Langeweile noch ein funktionaler Ansatz (jsfiddle):

PHP:
const transform_r = (array, id=1) => array.reduce((state, node) => {
  const { id, nodes } = state
  const { id: xid, nodes: children } = transform_r(node.sub || [], id + 1)
  return{
    id: xid,
    nodes: [ ...nodes, { id, name: node.name, children }],
  }
}, { id, nodes: [] })

const transform = (nodes) => transform_r(nodes).nodes

:)
 
Zuletzt bearbeitet:
Zurück
Oben