【问题标题】:Get only one variable from json response从 json 响应中只获取一个变量
【发布时间】:2021-09-24 13:10:47
【问题描述】:

我发出一个 POST 请求,然后我得到了包含大量事务的 json 响应,例如:

"Transactions": [
{
"ID": "1",
"Name" : "name",
"Code": "123aaa"
},
{
"ID": "2",
"Name" : "name1",
"Code": "12345bbb"
}
]

是否有任何简单的方法来获取一个变量(例如第一个“代码”值)?没有实体类等? 这个我试过了

var content = new StringContent(request, Encoding.UTF8, "application/json");
            var response = await HttpClient.PostAsync(postURL, content);
            var text = await response.Content.ReadAsStringAsync();

var code = JObject.Parse(text).Children().First().Values<string>("Code").First();

但它不起作用:

System.InvalidOperationException : 无法访问 Newtonsoft.Json.Linq.JValue 上的子值。

【问题讨论】:

    标签: c#


    【解决方案1】:

    假设提供的 json 实际上是一个对象(即有问题的字符串用大括号括起来) - 你可以使用 json 路径:

    var code = JObject.Parse(text).SelectToken("$.Transactions[0].Code").ToString(); // results in "123aaa"
    

    如果您热衷于使用 LINQ to JSON,您可以执行以下操作:

    var code = JObject.Parse(text)
        .Descendants()
        .OfType<JProperty>()
        .Where(p => p.Name == "Code")
        .Select(p => p.Value.ToString())
        .FirstOrDefault();
    

    但我认为最简单的方法是使用索引器:

    var code = JObject.Parse(text)["Transactions"][0]["Code"].ToString();
    

    【讨论】:

    • 谢谢您,您的解决方案帮助了我!
    • @Natali 很乐意提供帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2022-06-28
    相关资源
    最近更新 更多