c#:使用JToken从json读取值

时间:2018-07-18 07:24:52

标签: c# json json.net

我有一个json,我想从一个复杂的对象中获取一个值。这是我的json:

{
    "a1" : {
        "a2" : {
            "a3" : "desired_value"
        }
    }
}

我想获得值“期望值”。我尝试使用以下代码获取它:

    var token = JToken.Parse(json);
    string value = token.Value<string>("a1.a2.a3");

但是value字符串为空。我应该在路径中输入什么内容,以便我只能阅读一次,我的意思是没有得到令牌,然后遍历它的孩子性,等等?

1 个答案:

答案 0 :(得分:2)

您可以使用SelectToken来通过其路径选择属性,然后从中提取值:

string value = token.SelectToken("a1.a2.a3").Value<string>();
如果找不到该路径,

SelectToken将返回null,因此您可能需要注意这一点。

JToken.Value希望提供一个密钥,而SelectToken支持密钥和路径(密钥是简单路径)。您正在提供一个期望键的路径,这将导致找不到值。

为证明区别,您可以也可以像这样检索a3的值:

token.SelectToken("a1.a2").Value<string>("a3");

我不建议这样做,但是它确实显示了路径如何涉及遍历,但是键是简单的索引器。