【问题标题】:How to get a particular value from Json using SelectToken如何使用 SelectToken 从 Json 获取特定值
【发布时间】:2021-04-29 08:19:10
【问题描述】:

我有一个这样的 JSON

{
  "Customer": {
    "$type": "Dictionary`2",
    "Id": "6448DE37E2F3D9588118A1950"
  },
  "Databases": [
    {
      "$type": "Pime",
      "Id": 1,
      "Name": "Peter",
      "MobNo": 78877629,
      "PAN": "SAKKJKJ",
      "Defaulter": true,
    },
    {
      "$type": "Pime",
      "Id": 2,
      "Name": "James",
      "MobNo": 58277699,
      "PAN": "NAQKJKJ",
      "Defaulter": false,
    },
    {
      "$type": "Pime",
      "Id": 3,
      "Name": "Norton",
      "MobNo": 38877699,
      "PAN": "TAKKJKJ",
      "Defaulter": true,
    },
  ]
}

我正在使用令牌选择节点并返回Id=2的客户信息

我的代码是这样的:

StreamReader r = new StreamReader("C:\TestJson\Test.db");
string json = r.ReadToEnd();
JObject o = JObject.Parse(json);
JToken result = o.SelectToken("$.Databases[?(@.Id == '2')]");

但我得到的结果为空。我是否在 SelectToken() 方法中使用了错误的令牌?

【问题讨论】:

    标签: c# json json.net


    【解决方案1】:

    首先给定的 JSON 是无效的,在 database 数组中,Name 和 PAN 的键值应该是 string 类型。您在上面的 json 中缺少 "(double qoutes)。

    第二个也是最重要的事情,Id 的类型是一个整数,在你的 Json 路径中你试图用字符串类型搜索,即'2',尝试用不带引号的整数搜索Id 它会起作用。

    //No single qoutes for 2.
    JToken result = o.SelectToken("$.Databases[?(@.Id == 2)]");
    

    【讨论】:

    • 我已将名称、Pan 更新为字符串。这是一个错字。
    猜你喜欢
    • 2021-12-20
    • 2021-04-21
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多