代码之家  ›  专栏  ›  技术社区  ›  Buda Gavril

C:使用jtoken从json读取值

  •  1
  • Buda Gavril  · 技术社区  · 6 年前

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

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

    我想得到“期望值”。我试图通过以下代码获得它:

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

    但是 value 字符串为空。我应该把什么放在路径中,这样我就可以只读一次这个,我的意思是没有得到一个令牌,然后通过它的childern迭代,等等?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Kirk Larkin    6 年前

    你可以用 SelectToken 要使用其路径选择属性,然后从中提取值,请执行以下操作:

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

    选择令牌 会回来的 null 如果找不到路径,那么您可能需要防范。

    JToken.Value 希望提供密钥,而 选择令牌 同时支持键和路径(键 一条简单的路)。您提供了一个路径,其中需要一个键,这将导致找不到值。

    为了证明区别,你 能够 同时检索 a3 这样地:

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

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