使用C#从newtonsoft JSON中提取嵌套值

时间:2019-10-03 10:52:30

标签: c# json list json.net

我是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的“值”级别转换为列表,然后提取最后一项?

1 个答案:

答案 0 :(得分:3)

使用VS 2019 粘贴JSON作为类功能,您可以轻松创建一组与JSON匹配的类:

VS 2019 'Paste JSON as Classes' feature

然后,您可以将其用作Model类进行解析,而不必处理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; }
}