JSON.net:当节点有点时获取 JToken 的路径?
JSON.net : get path of a JToken when nodes have dot?
JToken 上有一个 属性 路径。
但如果对象名称包含“.”,它会使用“[' ']”转义对象名称。
- XPATH :
dir/nested_dir/file.txt
- JSON:
dir.nested_dir.['file.txt']
是否有其他 属性 将 return 路径作为字符串数组?
没有内置的 属性 可以执行此操作,但您可以制作一个扩展方法来轻松完成您想要的操作:
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));
Fiddle: https://dotnetfiddle.net/GOdo7t
注意:上述扩展方法会忽略路径中可能存在的任何 JArrays
。如果您需要处理数组,则需要对代码进行调整。
正如此处指出的:
在您的字段周围使用方括号和引号。例如,如果您的字段是 valid.key.with.dot
将其称为 ['valid.key.with.dot']
并在 JsonPath 中尝试
JsonPath.read(jsonString, "$.['valid.key.with.dot']")
看看这个dotNetFiddle
JToken 上有一个 属性 路径。 但如果对象名称包含“.”,它会使用“[' ']”转义对象名称。
- XPATH :
dir/nested_dir/file.txt
- JSON:
dir.nested_dir.['file.txt']
是否有其他 属性 将 return 路径作为字符串数组?
没有内置的 属性 可以执行此操作,但您可以制作一个扩展方法来轻松完成您想要的操作:
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));
Fiddle: https://dotnetfiddle.net/GOdo7t
注意:上述扩展方法会忽略路径中可能存在的任何 JArrays
。如果您需要处理数组,则需要对代码进行调整。
正如此处指出的:
在您的字段周围使用方括号和引号。例如,如果您的字段是 valid.key.with.dot
将其称为 ['valid.key.with.dot']
并在 JsonPath 中尝试
JsonPath.read(jsonString, "$.['valid.key.with.dot']")
看看这个dotNetFiddle