【问题标题】:How to use SelectToken to find value in nested dynamic JSON如何使用 SelectToken 在嵌套的动态 JSON 中查找值
【发布时间】:2019-07-24 02:10:07
【问题描述】:

我不知道如何使用 JToken 来获得“325.00”的“总收入”金额。

我尝试了很多不同的代码行,但似乎遗漏了一些明显的东西。

{
  "Rows": {
    "Row": [
      {
        "Rows": {
        },
        "type": "Section",
        "group": "Income",
        "Summary": {
          "ColData": [
            {
              "value": "Total Income"
            },
            {
              "value": "325.00"
            }
          ]
        }
      },
      {
      }
    ]
  }
}

【问题讨论】:

  • 谢谢布赖恩。我正在用 C# 编写代码

标签: c# json.net quickbooks-online


【解决方案1】:

对于您在问题中给出的特定 JSON 示例,您可以使用 SelectToken 提取 325.00 值,如下所示:

var obj = JObject.Parse(json);
var amount = (string)obj.SelectToken("Rows.Row[0].Summary.ColData[1].value");

小提琴:https://dotnetfiddle.net/WRMAVu

如果您想同时提取标签和金额,您可以使用SelectTokens 代替ColData 索引的通配符:

var obj = JObject.Parse(json);
var values = obj.SelectTokens("Rows.Row[0].Summary.ColData[*].value")
                .Select(t => (string)t)
                .ToArray();

小提琴:https://dotnetfiddle.net/DHZhS2

【讨论】:

  • 谢谢布赖恩。为什么不是 ("Rows.Row.Rows[0].Summary.ColData[*].value")?
  • 因为Summary 不在您在问题中发布的最里面的Rows 对象内;它位于Row 数组中的第一个对象内。内部 Rows 对象为空。如果您的实际 JSON 与您发布的示例不同,那么您可能需要相应地调整路径。
  • 再次感谢 - 如果行位置每次都不同怎么办?有没有办法搜索或查询令牌的 JSON 结果?
  • 更具体地说,如果我的 JSON 结果有多种类型(“Section”)和组(“Income”),我如何使用 SelectToken 获取给定类型和组内的数据?
  • 在这种情况下,您可能需要使用 LINQ 查询来选择数据。如果您可以编辑您的问题(或提出一个新问题)以提供更好的 JSON 示例以及您试图从中得到什么,那么我可以向您展示如何编写 LINQ 查询以从中获取数据.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多