Top 6 JavaScript Family Tree Diagram Libraries - DZone Java
https://dzone.com/articles/top-6-javascript-family-tree-diagram-libraries
https://stackoverflow.com/questions/62370136/convert-tree-structure-from-database-to-json-object-in-java
https://stackoverflow.com/questions/34841963/convert-json-object-to-tree-json-object
https://stackoverflow.com/questions/26059419/convert-this-json-data-into-tree-view
https://stackoverflow.com/questions/16294912/serializing-a-tree-into-json-object
https://github.com/Erffun/JsonTree
https://cknotes.com/c-load-a-treeview-from-json-save-a-treeview-to-json/
https://stackoverflow.com/questions/16294912/serializing-a-tree-into-json-object
https://www.codeproject.com/questions/806044/how-to-conver-multi-level-json-data-to-csharp-obje
https://github.com/nishiba/object_creator C++
json covert string
var dd=JSON.stringify(treeDu);
string covert json
var jsontext = '{"firstname":"James","surname":"Bond","mobile":["007-700-007","001-007-007-0007"]}';
var contact = JSON.parse(jsontext);
console.log(contact.firstname + " " + contact.surname);
console.log(contact.mobile[1]);
<script type="text/javascript"> var lines = ('1, cars, geovindu0, 0\n' + '2, boats, geovindu0, 0\n' + '3, oldtimer, geovindu11, 1\n' + '4, trucks, geovindu11, 1\n' + '5, heavytrucks, geovindu444, 4').split('\n'); //.split('\n') var tree = []; var lookup = {}; // temporary variable for (var i in lines) { var items = lines[i].split(', '); var obj = { id: items[0], parent_id: items[3], name: items[1], title:items[2], children: [] }; lookup[obj.id] = obj; if (lookup[obj.parent_id]) { lookup[obj.parent_id].children.push(obj); } else { tree.push(obj); } } //console.log(tree); // will display your tree </script>
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Geovin Du 涂聚文</title> <link rel="stylesheet" href="css/jquery.orgchart.css"> <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript"> var lines = ('1, cars, geovindu0, 0\n' + '2, boats, geovindu0, 1\n' + '3, oldtimer, geovindu11, 1\n' + '4, trucks, geovindu11, 3\n' + '5, heavytrucks, geovindu444, 4').split('\n'); //.split('\n')//根只有一个记录 var treeDu = []; var lookup = {}; // temporary variable for (var i in lines) { var items = lines[i].split(', '); var obj = { id: items[0], parent_id: items[3], name: items[1], title:items[2], children: [] }; lookup[obj.id] = obj; if (lookup[obj.parent_id]) { lookup[obj.parent_id].children.push(obj); } else { treeDu.push(obj); } } console.log(treeDu); // will display your tree var dd=JSON.stringify(treeDu); console.log(dd); $('#du').text(dd); var x = { name: "Sivaraman", age: 31, city: "Chennai" }; var y = JSON.stringify(x); document.getElementById("demo").value=y; </script> </head> <body> <div id="demo"></div> <div id="du"></div> <div id="chart-container"></div> <script type="text/javascript" src="js/jquery.orgchart.js"></script> <script type="text/javascript"> (function($) { $(function() { var lines = ('1, cars, geovindu, 0\n' + '2, boats, geovindu, 1\n' + '3, oldtimer, geovindu, 1\n' + '4, trucks, geovindu, 3\n' + '5, heavytrucks, geovindu, 4').split('\n'); //.split('\n') var tree = []; var lookup = {}; // temporary variable for (var i in lines) { var items = lines[i].split(', '); var obj = { id: items[0], parent_id: items[3], name: items[1], title:items[2], children: [] }; lookup[obj.id] = obj; if (lookup[obj.parent_id]) { lookup[obj.parent_id].children.push(obj); } else { tree.push(obj); } } //console.log(tree); // will display your tree var dds=JSON.stringify(tree); var str1 = dds.substr(1); //删除首字符 var str2 = str1.substring(0,str1.length-1); //删除最后末字符 console.log(str2); var contact = JSON.parse(str2); /* data【json or String】:数据 pan 【boolean 默:flase】:通过鼠标拖放来控制OrgChart zoom【boolean 默:false】:通过鼠标滚轮放大或缩放OrgChart zoominLimit【number 默:7】:设置放大限制 zoomoutLimit【number 默:0.5】:设置缩放限制 direction【String 默:t2b】:T2B:"从上到下",B2T:"从底到上",L2R:"左到右",R2L:"向左到右" verticalLevel【integer(>=2)】: toggleSiblingsResp【boolean 默:false】:通过单击左/右箭头分别显示/隐藏左/右兄弟节点 ajaxURL【json】:不同的优先级提供了发送不同节点的Ajax请求的URL visibleLevel【number】:默认展开几级 nodeId【String 默:id】:将数据源的一个属性设置为每个OrgChart节点的唯一标识符。 nodeTitle【String 默:name】:将数据源的一个属性设置为OrgChart节点标题段的文本内容 nodeContent【String】:将数据源的一个属性设置为OrgChart节点的内容部分的文本内容。 nodeTemplate【function】:它是一个模板生成函数,用于定制任何复杂的节点内部结构 createNode【function】:它是用于自定义每个OrgCad节点的回调函数 parentNodeSymbol【String 默:fa-users】:使用图标暗示该节点有子节点 exportButton【boolean 默:false】:是否启用OrgChar的导出按钮 exportFilename【String 默:OrgChart】:当输出当前的OrgChart作为图片时,它是文件名。 exportFileextension【String 默:png】:可用的值是PNG和PDF。 chartClass【String】:当你想在一个页面上实例化多个orgcharts 时,你应该添加不同的类名来区分它们。 draggable【boolean 默:false】:用户可以拖动和删除OrgChart节点 dropCriteria【function】:用户可以构造自己的标准来限制拖动节点和删除区域之间的关系 initCompleted【function】:经常知道您的表何时已经完全初始化、数据加载和呈现,尤其是当使用Ajax数据源时 */ var oc = $('#chart-container').orgchart({ 'data' : contact, 'depth': 12, 'nodeId':'id', //'nodeTitle':'photo', 'nodeContent': 'title', drag: true,//是否可以拖动 //'direction': 'b2t', //'direction': 'r2l', //'toggleSiblingsResp': true, 'exportButton': true, 'exportFilename': 'DuOrgChart', 'pan': true, 'zoom': true }); }); })(jQuery); </script> </body> </html>
primefaces
PrimeFaces – Ultimate UI Framework
https://www.primefaces.org/
https://primefaces.github.io/primefaces/7_0/#/
https://github.com/primefaces/primefaces
https://www.javatpoint.com/primefaces-tutorial
JavaServer Faces
serialize nested Parent-Child relationships into JSON?
C# Json Interface serialization parent-child
serializing tree parent children json object
serializing tree json object
https://stackoverflow.com/questions/62176611/json-serializing-datarow-into-parent-object
https://discourse.mcneel.com/t/serializing-deserializing-datatrees-with-json-net/66672
https://stackoverflow.com/questions/54288333/c-sharp-json-interface-serialization-parent-child
https://stackoverflow.com/questions/16294912/serializing-a-tree-into-json-object
https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to?pivots=dotnet-6-0
https://stackoverflow.com/questions/35275335/convert-a-treeview-to-json-using-c-sharp
python
https://newbedev.com/how-to-serialize-a-tree-class-object-structure-into-json-file-format
/// <summary> ///https://stackoverflow.com/questions/35275335/convert-a-treeview-to-json-using-c-sharp ///https://stackoverflow.com/questions/65215203/how-to-serialize-a-json-file-with-tree-structure-with-jackson ///Geovin Du ///geovindu /// </summary> [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)] public class Node { /// <summary> /// /// </summary> public Node() { this.Children = new List<Node>(); } /// <summary> /// /// </summary> /// <param name="_value"></param> /// <param name="_id"></param> /// <param name="_name"></param> /// <param name="_title"></param> /// <param name="_parentId"></param> /// <param name="_children"></param> /// <param name="_isChecked"></param> public Node(string _value,int _id,string _name,string _title,int _parentId, List<Node> _children = null, bool _isChecked = false) { Value = _value; isChecked = _isChecked; Id = _id; Name = _name; Title = _title; ParentId = _parentId; if (_children != null) { Children = _children; } } [JsonProperty("value")] public string Value { get; set; } [JsonProperty("isChecked")] public bool isChecked { get; set; } [JsonProperty("Id")] public int Id { get; set; } [JsonProperty("Name")] public string Name { get; set; } [JsonProperty("Title")] public string Title { get; set; } [JsonProperty("ParentId")] public int ParentId { get; set; } [JsonProperty("Children", NullValueHandling = NullValueHandling.Ignore)] public List<Node> Children { get; set; } /// <summary> /// /// </summary> [JsonIgnore] public string JSon { get { return JsonConvert.SerializeObject(this); } } }
/// <summary> /// https://stackoverflow.com/questions/35275335/convert-a-treeview-to-json-using-c-sharp /// https://stackoverflow.com/questions/16294912/serializing-a-tree-into-json-object /// geovindu,Geovin Du /// 涂聚文 /// </summary> public class OrgChartConverter : JsonConverter { /// <summary> /// /// </summary> /// <param name="objectType"></param> /// <returns></returns> public override bool CanConvert(Type objectType) { //return typeof(Node<T>).IsAssignableFrom(objectType); return typeof(Node).IsAssignableFrom(objectType); } /// <summary> /// /// </summary> /// <param name="writer"></param> /// <param name="value"></param> /// <param name="serializer"></param> public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { //Node<T> node = (Node<T>)value; Node node = (Node)value; //List<Node> node = (List<Node>)value; JObject obj = new JObject(); //foreach (Node n in node) //{ // obj.Add("Name", n.Value); // obj.Add("Children", JArray.FromObject(n.Children, serializer)); //} // obj.Add("id", node.Id); obj.Add("Name", node.Name); obj.Add("Title", node.Title); obj.Add("ParentId", node.ParentId); obj.Add("Children", JArray.FromObject(node.Children, serializer)); obj.WriteTo(writer); } /// <summary> /// /// </summary> public override bool CanRead { get { return false; } } /// <summary> /// /// </summary> /// <param name="reader"></param> /// <param name="objectType"></param> /// <param name="existingValue"></param> /// <param name="serializer"></param> /// <returns></returns> public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { throw new NotImplementedException(); } }
/// <summary> /// 父节点 /// geovindu /// </summary> public class RootParent { /// <summary> /// /// </summary> public Node ParentNode { get; set; } /// <summary> /// /// </summary> public List<Node> Children { get; set; } /// <summary> /// /// </summary> public DataRow Data { get; set; } }