【问题标题】:Extract nested values from newtonsoft JSON with C# [duplicate]使用 C# 从 newtonsoft JSON 中提取嵌套值 [重复]
【发布时间】:2020-02-01 16:22:43
【问题描述】:

我是 C# 新手。我用 newtonsoft 解析了以下 JSON:

{"Results":{"output1":{"type":"table","value":{"ColumnNames":["Purchased Bike","Scored Labels"],"ColumnTypes":["String","Double"],"Values":[["value","0.55503808930127"]]}}}}

我想提取值 0.555... 在“值”级别下。我正在考虑将此 JSON 转换为列表,然后提取其中的最后一个元素:

var pred = results["Results"]["output1"]["value"]["Values"].ToObject<List<"Values">>();

List 被突出显示为不合适的。请注意,results 的类型为 Newtonsoft.Json.Linq.JObject

如果我尝试:

var pred = results["Results"]["output1"]["value"]["Values"].ToObject<List<Values>>();

如果没有引号,值将突出显示为未找到的类型或命名空间。

如何将 JSON 的“值”级别转换为列表,然后提取最后一项?

【问题讨论】:

  • 你的json无效,最后再加一个}

标签: c# json list json.net


【解决方案1】:

使用 VS 2019 Paste JSON as Classes 功能,您可以轻松创建一组类来匹配您的 JSON:

然后,您可以将其用作模型类进行解析,而无需处理 JObject 或 JArray(您越想使用它,就会越不方便)。

工作演示:参见 .NET Fiddle -> https://dotnetfiddle.net/o5fIH5

小提琴代码:

using System;
using Newtonsoft.Json;

public class Program
{
    public static void Main()
    {
        var json = "{\"Results\":{\"output1\":{\"type\":\"table\",\"value\":{\"ColumnNames\":[\"Purchased Bike\",\"Scored Labels\"],\"ColumnTypes\":[\"String\",\"Double\"],\"Values\":[[\"value\",\"0.55503808930127\"]]}}}}";
        var parsed = JsonConvert.DeserializeObject<Rootobject>(json);

        foreach (var array in parsed.Results.output1.value.Values)
            foreach (var entry in array)
                Console.WriteLine(entry);

        Console.WriteLine("\r\nItem Value: " + parsed.Results.output1.value.Values[0][1]);
    }
}

// Generated classes:

public class Rootobject
{
    public Results Results { get; set; }
}

public class Results
{
    public Output1 output1 { get; set; }
}

public class Output1
{
    public string type { get; set; }
    public Value value { get; set; }
}

public class Value
{
    public string[] ColumnNames { get; set; }
    public string[] ColumnTypes { get; set; }
    public string[][] Values { get; set; }
}

【讨论】:

    猜你喜欢
    • 2019-07-31
    • 2021-12-30
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多