using System.Collections; using System.Collections.Generic; using UnityEngine; public class TaskNode { private string taskNodeName; private string taskParams; private List<TaskNode> taskNodeList; public TaskNode(string taskNodeName, string taskParams, List<TaskNode> taskNodeList=null) { this.taskNodeName = taskNodeName; this.taskParams = taskParams; this.taskNodeList = taskNodeList; } public string TaskNodeName { get => taskNodeName; set => taskNodeName = value; } public string TaskParams { get => taskParams; set => taskParams = value; } public List<TaskNode> TaskNodeList { get => taskNodeList; set => taskNodeList = value; } } public class JsonTestHandle : MonoBehaviour { private TaskNode taskNode; // Start is called before the first frame update void Start() { //taskNode = new TaskNode("hexin", "0"); //List<TaskNode> taskNodes = new List<TaskNode>(); //TaskNode taskNode1 = new TaskNode("hexin1", "1", new List<TaskNode> { new TaskNode("Xiao Ming", "2"), new TaskNode("Xiao Lan", "3") }); //TaskNode taskNode2 = new TaskNode("hexin2", "1", new List<TaskNode> { new TaskNode("Zhang San", "2") }); //taskNodes.Add(taskNode1); //taskNodes.Add(taskNode2); //taskNode.TaskNodeList = taskNodes; //taskNode.TaskNodeList.Add(new TaskNode("李思", "0", new List<TaskNode> { new TaskNode("Xiao Ming", "2"), new TaskNode("Xiao Lan", "3") })); //taskNode.TaskNodeList.Add( // new TaskNode("王五", "0", new List<TaskNode> { // new TaskNode("王五的children", "1", new List<TaskNode> { // new TaskNode("Wang Wu's grandson", "2", new List<TaskNode> { // new TaskNode("Xiao Ming", "2"), new TaskNode("Xiao Lan", "3") // }) // }) // }) // ); //taskNode.TaskNodeList.Add( // new TaskNode("王五", "0", new List<TaskNode> { // new TaskNode("Xiao Ming", "1", new List<TaskNode> { // new TaskNode("Wang Wu's grandson", "2", new List<TaskNode> { // new TaskNode("Xiao Ming", "2"), new TaskNode("Xiao Lan", "3") // }) // }) // }) // ); taskNode.TaskNodeList.Add( // new TaskNode("Xiao Ming", "0", new List<TaskNode> { // new TaskNode("Xiao Ming", "1", new List<TaskNode> { // new TaskNode("Wang Wu's grandson", "2", new List<TaskNode> { // new TaskNode("Xiao Ming", "2"), new TaskNode("Xiao Lan", "3") // }) // }) // }) // ); //JsonTools.SaveJsonToLocal(taskNode, "localDatas"); } private string tempNodeStr = "Xiao Ming"; // Update is called once per frame void Update() { if (Input.GetKeyDown(KeyCode.P)) { TaskNode taskNode= JsonTools.FromFile<TaskNode>(Application.streamingAssetsPath + "/Json/localDatas.json"); DeleteJsonNode(taskNode.TaskNodeList, tempNodeStr); Debug.Log("After deletion--:" + JsonTools.ToJson(taskNode)); //JsonTools.SaveJsonToLocal(taskNode, "localDatas"); } if (Input.GetKeyDown(KeyCode.L)) { TaskNode taskNode = JsonTools.FromFile<TaskNode>(Application.streamingAssetsPath + "/Json/localDatas.json"); TaskNode node = new TaskNode("Xiao Ming1", "12345", new List<TaskNode> { new TaskNode("He Xin", "1212") }); ChangeJsonNode(taskNode.TaskNodeList, tempNodeStr,node); Debug.Log("After update--:" + JsonTools.ToJson(taskNode)); } } /// <summary> /// Update node /// </summary> /// <param name="taskNodeList"></param> /// <param name="nodeStr"></param> /// <param name="newTaskNode"></param> void ChangeJsonNode(List<TaskNode> taskNodeList, string nodeStr,TaskNode newTaskNode) { if (taskNodeList != null) { List<TaskNode> temp = taskNodeList; for (int i = 0; i < temp.Count; i + + ) { if (temp[i].TaskNodeName.Equals(nodeStr)) { temp[i] = newTaskNode; } else { if (temp[i].TaskNodeList != null) { List<TaskNode> temp1 = temp[i].TaskNodeList; for (int j = 0; j < temp1.Count; j + + ) { if (temp1[j].TaskNodeName.Equals(nodeStr)) { temp1[j] = newTaskNode; } else { ChangeJsonNode(temp1[j].TaskNodeList, nodeStr, newTaskNode); } } } } } } } /// <summary> /// Delete node /// </summary> /// <param name="taskNodeList"></param> /// <param name="nodeStr"></param> void DeleteJsonNode(List<TaskNode> taskNodeList, string nodeStr) { if (taskNodeList != null) { List<TaskNode> temp = taskNodeList; for (int i = 0; i < temp.Count; i + + ) { if (temp[i].TaskNodeName.Equals(nodeStr)) { taskNodeList.Remove(temp[i]); } } for (int i = 0; i < temp.Count; i + + ) { if (temp[i].TaskNodeList != null) { List<TaskNode> temp1 = temp[i].TaskNodeList; for (int j = 0; j < temp1.Count; j + + ) { if (temp1[j].TaskNodeName.Equals(nodeStr)) { temp1.Remove(temp1[j]); } } for (int j = 0; j < temp1.Count; j + + ) { DeleteJsonNode(temp1[j].TaskNodeList, nodeStr); } } } } } }