JSON.net:当节点有点时获取JToken的路径?

时间:2018-08-09 16:23:13

标签: json.net jsonpath

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

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

还有其他一些属性可以将路径作为字符串数组返回吗?

2 个答案:

答案 0 :(得分:1)

没有内置属性可以执行此操作,但是您可以创建一个扩展方法来轻松实现所需的功能:

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。如果需要处理数组,则需要对代码进行调整。

答案 1 :(得分:0)

如此处所指出:https://stackoverflow.com/a/19727164/1555435

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

将其引用为['valid.key.with.dot'],然后在JsonPath中尝试

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

查看此dotNetFiddle