平铺json转层级json(补充版)

把以下json对象
{"msg_flowid":"22","msg_opt_nu":"22","msg_chk_in":"22","msg_chk_acc":"22","msg_chk_out":"22"}
按照下划线分割,变成以下具有层级关系的json对象
{"msg":{"flowid":"22","opt":{"nu":"22"},"chk":{"in":"22","acc":"22","out":"22"}}}

其中的字段都是动态变化的,并不是死的,层级也是变化的,所以不能使用硬编码的方式。本文中的仅仅是举例子。抱歉,刚才我的提问没有表达清楚。感谢各位回答问题的大佬。

你这个问题关键点是把{"msg_flowid":"22","msg_opt_nu":"22","msg_chk_in":"22","msg_chk_acc":"22","msg_chk_out":"22"}重新格式化,可以考虑一下用字符串的分割、拼接来获得下面的json字符串

直接上代码么

 class Program
    {
        static void Main(string[] args)
        {
            string jsonStr = File.ReadAllText("test.json");
            Console.WriteLine(jsonStr);
            JObject jObject=  jsonStr.JsonFromString<JObject>();
            JObject target = new JObject();
            jObject.Properties().ToList().ForEach(jp=> {
                Console.WriteLine($"{jp.Name}==={jp.Value}");
                string[] names= jp.Name.Split('_');
               
                //创建对象
                JObject node = new JObject();
                node[names[names.Count() -1]] = jp.Value;
                for (int i = names.Count()-2; i >=0; --i)
                {
                    JObject tempObj = new JObject();
                    tempObj[names[i]] = node;
                    node = tempObj;
                }

                //合入目标对象中
                DataMerge(node,target);

            });

            Console.WriteLine("=========================");

            string targetStr= target.JsonToString();
            Console.WriteLine(targetStr);
            File.WriteAllText("test1.json",targetStr);
            Console.ReadKey();
        }

        private static void DataMerge(JObject src,JObject dst)
        {
            var node_jp = src.Properties().First();
            var temp = dst.Properties().ToList().Find(it => it.Name == node_jp.Name);
            if(temp == null)
            {
                dst[node_jp.Name] = node_jp.Value;
            }
            else
            {
                DataMerge(node_jp.Value as JObject,temp.Value as JObject);
            }
        }
    }

使用了Newtonsoft.Json.使用的扩展方法参见https://blog.csdn.net/SANYUNI/article/details/109135752