【问题标题】:JSON.net : get path of a JToken when nodes have dot?JSON.net:当节点有点时获取 JToken 的路径?
【发布时间】:2018-08-09 16:23:13
【问题描述】:

JToken 上有一个属性 Path。 但是如果对象名称包含“。”,它会使用“['']”转义对象名称

  • XPATH : dir/nested_dir/file.txt
  • JSON:dir.nested_dir.['file.txt']

是否有其他属性可以将路径作为字符串数组返回?

【问题讨论】:

    标签: json.net jsonpath


    【解决方案1】:

    这里指出:https://stackoverflow.com/a/19727164/1555435

    在您的字段周围使用方括号和引号。例如,如果您的字段是valid.key.with.dot

    将其称为['valid.key.with.dot'] 并在 JsonPath 中尝试

    JsonPath.read(jsonString, "$.['valid.key.with.dot']")
    

    看看这个dotNetFiddle

    【讨论】:

      【解决方案2】:

      没有内置属性可以做到这一点,但您可以创建一个扩展方法来轻松完成您想要的工作:

      public static class JsonExtensions
      {
          public static string[] PathAsArray (this JToken token)
          {
              return token.AncestorsAndSelf()
                          .OfType<JProperty>()
                          .Select(p => p.Name)
                          .Reverse()
                          .ToArray();
          }
      }
      

      然后像这样使用它:

      var pathArray = token.PathAsArray();
      Console.WriteLine(string.Join("/", pathArray));
      

      小提琴:https://dotnetfiddle.net/GOdo7t

      注意:上述扩展方法会忽略路径中可能存在的任何JArrays。如果需要处理数组,则需要对代码进行调整。

      【讨论】:

      • 不知道 dotnetfiddle。很酷。谢谢你的回答。
      猜你喜欢
      • 1970-01-01
      • 2018-11-21
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多