JToken上有一个属性Path。但如果对象名称包含“。”,它会以“['']”转义对象的名称。
dir/nested_dir/file.txt
dir.nested_dir.['file.txt']
是否有一些其他属性将路径作为字符串数组返回?
没有内置属性可以执行此操作,但您可以创建一个可以轻松完成所需操作的扩展方法:
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
。如果需要处理数组,则需要对代码进行调整。
正如在此指出:https://stackoverflow.com/a/19727164/1555435
在您的字段周围使用括号和引号。例如,如果您的字段是valid.key.with.dot
请将其称为['valid.key.with.dot']
,并在JsonPath中尝试
JsonPath.read(jsonString, "$.['valid.key.with.dot']")
看看这个dotNetFiddle