2017-06-21 28 views
-3

您好我需要一种方法来遍历给定的json数组的json对象,并根据每个json对象的“F”属性中的反斜杠数量(/)动态地为每个json对象添加名为“depth”的属性我需要为我的项目。如何遍历json字符串(json对象的json数组)并使用c#动态添加属性?

这里是JSON字符串:

[ 
    { 
     "A":"0", 
     "B":"0", 
     "ID":"000001", 
     "C":"Class", 
     "D":"/000001", 

     "F":"/Class", 
     "children":[ 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000004", 
      "C":"Test1", 
      "D":"/000001/000004", 

      "F":"/Class/Test1" 
     }, 
     { 
      "A":"0", 
      "B":"0", 
      "ID":"000005", 
      "C":"aaa1_test_2", 
      "D":"/000001/000005", 

      "F":"/Class/aaa1_test_2", 
      "children":[ 
       { 
        "A":"1", 
        "B":"1", 
        "ID":"000006", 
        "C":"abcd", 
        "D":"/000001/000005/000006", 

        "F":"/Class/aaa1_test_2/abcd" 
       } 
      ] 
     }, 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000007", 
      "C":"16.2.2017", 
      "D":"/000001/000007", 

      "F":"/Class/16.2.2017" 
     }, 
     { 
      "A":"0", 
      "B":"1", 
      "ID":"000008", 
      "C":"008000_02-Core Dia:-CORE DIAMETER", 
      "D":"/000001/000008", 


      "F":"/Class/008000_02-Core Dia:-CORE DIAMETER", 
      "children":[ 
       { 
        "A":"1", 
        "B":"1", 
        "ID":"000027", 
        "C":"1wa", 
        "D":"/000001/000008/000027", 

        "F":"/Class/008000_02-Core Dia:-CORE DIAMETER/@1wa" 
       } 
      ] 
     }, 
     { 
      "A":"0", 
      "B":"1", 
      "ID":"000009", 
      "C":"20.2.2017", 
      "D":"/000001/000009", 


      "F":"/Class/20.2.2017", 
      "children":[ 
       { 
        "A":"1", 
        "B":"1", 
        "ID":"000010", 
        "C":"TEST-005", 
        "D":"/000001/000009/000010", 

        "F":"/Class/20.2.2017/TEST-005" 
       } 
      ] 
     }, 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000011", 
      "C":"3.3.2017", 
      "D":"/000001/000011", 

      "F":"/Class/3.3.2017" 
     }, 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000016", 
      "C":"TEST100", 
      "D":"/000001/000016", 

      "F":"/Class/TEST100" 
     }, 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000017", 
      "C":"Test101", 
      "D":"/000001/000017", 

      "F":"/Class/Test101" 
     }, 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000019", 
      "C":"Test102", 
      "D":"/000001/000019", 

      "F":"/Class/Test102" 
     }, 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000024", 
      "C":"Godrej", 
      "D":"/000001/000024", 

      "F":"/Class/God" 
     }, 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000025", 
      "C":"T", 
      "D":"/000001/000025", 

      "F":"/Class/T" 
     }, 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000026", 
      "C":"K_Test", 
      "D":"/000001/000026", 

      "F":"/Class/K_Test" 
     }, 
     { 
      "A":"1", 
      "B":"0", 
      "ID":"000028", 
      "C":"RB_TEST1", 
      "D":"/000001/000028", 

      "F":"/Class/RB_TEST1" 
     }, 
     { 
      "A":"0", 
      "B":"0", 
      "ID":"900004", 
      "C":"Comps", 
      "D":"/000001/900004", 


      "F":"/Class/Comps", 
      "children":[ 
       { 
        "A":"0", 
        "B":"1", 
        "ID":"900006", 
        "C":"Capacitors", 
        "D":"/000001/900004/900006", 


        "F":"/Class/Comps/Capacitors", 
        "children":[ 
        { 
         "A":"1", 
         "B":"1", 
         "ID":"000015", 
         "C":"Test2", 
         "D":"/000001/900004/900006/000015", 

         "F":"/Class/Comps/Capacitors/Test2" 
        }, 
        { 
         "A":"0", 
         "B":"1", 
         "ID":"000018", 
         "C":"Test3", 
         "D":"/000001/900004/900006/000018", 


         "F":"/Class/Comps/Capacitors/Test3", 
         "children":[ 
          { 
           "A":"1", 
           "B":"0", 
           "ID":"000020", 
           "C":"Test4", 
           "D":"/000001/900004/900006/000018/000020", 
           "F":"/Class/Comps/Capacitors/Test3/Test4" 
          } 
         ] 
        } 
        ] 
       }, 
       { 
        "A":"1", 
        "B":"1", 
        "ID":"900007", 
        "C":"Induct", 
        "D":"/000001/900004/900007", 

        "F":"/Class/Comps/Induct" 
       }, 
       { 
        "A":"1", 
        "B":"1", 
        "ID":"900008", 
        "C":"ICS", 
        "D":"/000001/900004/900008", 

        "F":"/Class/Comps/ICS" 
       } 
      ] 
     } 
     ] 
    } 
] 

我需要的输出是这样的:

[ 
    { 
     "A":"0", 
     "B":"0", 
     "ID":"000001", 
     "C":"Class", 
     "D":"/000001", 
     "depth":1, 
     "F":"/Class", 
     "children":[ 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000004", 
      "C":"Test1", 
      "D":"/000001/000004", 
      "depth":2, 
      "F":"/Class/Test1" 
     }, 
     { 
      "A":"0", 
      "B":"0", 
      "ID":"000005", 
      "C":"aaa1_test_2", 
      "D":"/000001/000005", 
      "depth":2, 
      "F":"/Class/aaa1_test_2", 
      "children":[ 
       { 
        "A":"1", 
        "B":"1", 
        "ID":"000006", 
        "C":"abcd", 
        "D":"/000001/000005/000006", 
        "depth":3, 
        "F":"/Class/aaa1_test_2/abcd" 
       } 
      ] 
     }, 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000007", 
      "C":"16.2.2017", 
      "D":"/000001/000007", 
      "depth":2, 
      "F":"/Class/16.2.2017" 
     }, 
     { 
      "A":"0", 
      "B":"1", 
      "ID":"000008", 
      "C":"008000_02-Core Dia:-CORE DIAMETER", 
      "D":"/000001/000008", 
      "depth":2, 
      "F":"/Class/008000_02-Core Dia:-CORE DIAMETER", 
      "children":[ 
       { 
        "A":"1", 
        "B":"1", 
        "ID":"000027", 
        "C":"1wa", 
        "D":"/000001/000008/000027", 
        "depth":3, 
        "F":"/Class/008000_02-Core Dia:-CORE DIAMETER/@1wa" 
       } 
      ] 
     }, 
     { 
      "A":"0", 
      "B":"1", 
      "ID":"000009", 
      "C":"20.2.2017", 
      "D":"/000001/000009", 
      "depth":2, 
      "F":"/Class/20.2.2017", 
      "children":[ 
       { 
        "A":"1", 
        "B":"1", 
        "ID":"000010", 
        "C":"TEST-005", 
        "D":"/000001/000009/000010", 
        "depth":3, 
        "F":"/Class/20.2.2017/TEST-005" 
       } 
      ] 
     }, 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000011", 
      "C":"3.3.2017", 
      "D":"/000001/000011", 
      "depth":2, 
      "F":"/Class/3.3.2017" 
     }, 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000016", 
      "C":"TEST100", 
      "D":"/000001/000016", 
      "depth":2, 
      "F":"/Class/TEST100" 
     }, 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000017", 
      "C":"Test101", 
      "D":"/000001/000017", 
      "depth":2, 
      "F":"/Class/Test101" 
     }, 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000019", 
      "C":"Test102", 
      "D":"/000001/000019", 
      "depth":2, 
      "F":"/Class/Test102" 
     }, 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000024", 
      "C":"Godrej", 
      "D":"/000001/000024", 
      "depth":2, 
      "F":"/Class/God" 
     }, 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000025", 
      "C":"T", 
      "D":"/000001/000025", 
      "depth":2, 
      "F":"/Class/T" 
     }, 
     { 
      "A":"1", 
      "B":"1", 
      "ID":"000026", 
      "C":"K_Test", 
      "D":"/000001/000026", 
      "depth":2, 
      "F":"/Class/K_Test" 
     }, 
     { 
      "A":"1", 
      "B":"0", 
      "ID":"000028", 
      "C":"RB_TEST1", 
      "D":"/000001/000028", 
      "depth":2, 
      "F":"/Class/RB_TEST1" 
     }, 
     { 
      "A":"0", 
      "B":"0", 
      "ID":"900004", 
      "C":"Comps", 
      "D":"/000001/900004", 
      "depth":2, 
      "F":"/Class/Comps", 
      "children":[ 
       { 
        "A":"0", 
        "B":"1", 
        "ID":"900006", 
        "C":"Capacitors", 
        "D":"/000001/900004/900006", 
        "depth":3, 
        "F":"/Class/Comps/Capacitors", 
        "children":[ 
        { 
         "A":"1", 
         "B":"1", 
         "ID":"000015", 
         "C":"Test2", 
         "D":"/000001/900004/900006/000015", 
         "depth":4, 
         "F":"/Class/Comps/Capacitors/Test2" 
        }, 
        { 
         "A":"0", 
         "B":"1", 
         "ID":"000018", 
         "C":"Test3", 
         "D":"/000001/900004/900006/000018", 
         "depth":4, 
         "F":"/Class/Comps/Capacitors/Test3", 
         "children":[ 
          { 
           "A":"1", 
           "B":"0", 
           "ID":"000020", 
           "C":"Test4", 
           "D":"/000001/900004/900006/000018/000020", 
           "depth":5, 
           "F":"/Class/Comps/Capacitors/Test3/Test4" 
          } 
         ] 
        } 
        ] 
       }, 
       { 
        "A":"1", 
        "B":"1", 
        "ID":"900007", 
        "C":"Induct", 
        "D":"/000001/900004/900007", 
        "depth":2, 
        "F":"/Class/Comps/Induct" 
       }, 
       { 
        "A":"1", 
        "B":"1", 
        "ID":"900008", 
        "C":"ICS", 
        "D":"/000001/900004/900008", 
        "depth":2, 
        "F":"/Class/Comps/ICS" 
       } 
      ] 
     } 
     ] 
    } 
] 

例如,如果你看一下第一个JSON对象 “F” 属性包含1回斜线因此“深度“属性值应该是1.

+0

_“这是代码”_ - 您没有发布任何代码。只是JSON数据。显而易见的方法是将源数据反序列化为实际的对象模型,然后使用新的'depth'属性将数据作为JSON进行研究。根据您使用的处理JSON的方式,您可以反序列化为具有'depth'属性的对象(该对象将保持未初始化状态),设置属性然后重新序列化,或者仅从一个数据中复制没有财产的结构给另一个拥有财产的财产,在这个财产中你将它设定为你想要的价值。 –

回答

0

我假设您只需要在响应中添加另一个property(F),我宁愿在C#代码中添加新属性比改变Json。一旦你映射Json响应与响应类对象(C#),使用Foreach循环通过每个children对象检查你想要的条件和add F

试试这个。

的foreach(在root.children变种X){//条件}

1

您可以使用Newtonsoft.Json包和JPath(http://goessner.net/articles/JsonPath/

,这样你的代码可以是这样的:

var parsedJson = JToken.Parse(json); 
var nodes = parsedJson.SelectTokens("$..*"); 
foreach (var node in nodes.OfType<JObject>()) 
{ 
    var pathValue = node.Property("F")?.Value?.Value<string>(); 
    if (string.IsNullOrWhiteSpace(pathValue)) 
    { 
     continue; 
    } 

    var depth = pathValue.Split(new[] { '/' }, StringSplitOptions.None).Length; 
    node.Add("depth", depth - 1); 
} 
var modifiedJson = parsedJson.ToString();