gpt4 book ai didi

c# - 从动态 JSON 数组中提取数据

转载 作者:行者123 更新时间:2023-12-04 17:21:14 28 4
gpt4 key购买 nike

我正在使用 C# 将动态 JSON 对象转换为 Excel。我已经尝试了以下步骤。从数据库中,我得到以下字符串形式的响应。

[ {“ResourceName”:“AH”,“ProjectID”:1,“WeekNo”:2,“2019 年 12 月 2 日”:7.00,“2019 年 12 月 3 日”:7.50,“2019 年 12 月 4 日”: 7.00,“2019 年 12 月 5 日”:7.50,“2019 年 12 月 6 日”:7.00},{“ResourceName”:“CK”,“ProjectID”:1,“WeekNo”:2,“2019 年 12 月 2 日”:6.00,“03 2019 年 12 月”:5.00,“2019 年 12 月 4 日”:3.00,“2019 年 12 月 5 日”:2.00,“2019 年 12 月 6 日”:5.00},{“ResourceName”:“AH”,“ProjectID”:1,“WeekNo”: 3,"2019年12月9日":6.00,"2019年12月10日":7.50,"2019年12月11日":7.00,"2019年12月12日":7.50,"2019年12月13日":8.00},{"ResourceName":"CK ","ProjectID":1,"WeekNo":3,"2019年12月9日":6.00,"2019年12月10日":4.00,"2019年12月11日":null,"2019年12月12日":5.00,"2019年12月13日"":4.00},{"ResourceName":"SL","ProjectID":1,"WeekNo":3,"2019 年 12 月 9 日":null,"2019 年 12 月 10 日":1.50,"2019 年 12 月 11 日":null, “2019 年 12 月 12 日”:1.50,“2019 年 12 月 13 日”:0.50},{“ResourceName”:“AH”,“ProjectID”:1,“WeekNo”:4,“2019 年 12 月 16 日”:7.00},{“ResourceName” ":"CK","ProjectID":1,"WeekNo":4,"2019 年 12 月 16 日":3.00}]

我需要将上述字符串转换为 JSON 并执行循环操作,以便为创建 Excel 设置标题和详细信息值。我使用以下方法创建了一个 dynamic 对象。

ResourceName 和动态日期应作为列标题。无法创建模型,因为 date 值是动态的。

using System.Web.Helpers;
dynamic jsonObject = Json.Decode(response);

我能够从 QuickWatch 中提取值,但是,输出仅在运行时生成,如下所示。

(new System.Collections.Generic.Mscorlib_DictionaryDebugView<string, object>(((System.Web.Helpers.DynamicJsonObject)((System.Web.Helpers.DynamicJsonArray)jsonObject)._arrayValues[0])._values).Items[0]).Key

有没有办法循环遍历动态数组内容?

Dynamic var hierarchy

最佳答案

我建议将 JSON 反序列化为字典集合,而不是使用 Dynamic,此方法提供类型安全和迭代。以下示例使用 Newtonsoft.Json NuGet 包:

示例.json:

[
{
"ResourceName": "AH",
"ProjectID": 1,
"WeekNo": 2,
"02 Dec 2019": 7.00,
"03 Dec 2019": 7.50,
"04 Dec 2019": 7.00,
"05 Dec 2019": 7.50,
"06 Dec 2019": 7.00
},
{
"ResourceName": "CK",
"ProjectID": 1,
"WeekNo": 2,
"02 Dec 2019": 6.00,
"03 Dec 2019": 5.00,
"04 Dec 2019": 3.00,
"05 Dec 2019": 2.00,
"06 Dec 2019": 5.00
},
{
"ResourceName": "AH",
"ProjectID": 1,
"WeekNo": 3,
"09 Dec 2019": 6.00,
"10 Dec 2019": 7.50,
"11 Dec 2019": 7.00,
"12 Dec 2019": 7.50,
"13 Dec 2019": 8.00
},
{
"ResourceName": "CK",
"ProjectID": 1,
"WeekNo": 3,
"09 Dec 2019": 6.00,
"10 Dec 2019": 4.00,
"11 Dec 2019": null,
"12 Dec 2019": 5.00,
"13 Dec 2019": 4.00
},
{
"ResourceName": "SL",
"ProjectID": 1,
"WeekNo": 3,
"09 Dec 2019": null,
"10 Dec 2019": 1.50,
"11 Dec 2019": null,
"12 Dec 2019": 1.50,
"13 Dec 2019": 0.50
},
{
"ResourceName": "AH",
"ProjectID": 1,
"WeekNo": 4,
"16 Dec 2019": 7.00
},
{
"ResourceName": "CK",
"ProjectID": 1,
"WeekNo": 4,
"16 Dec 2019": 3.00
}
]

代码:

static void Main(string[] args)
{
string json = File.ReadAllTextAsync("sample.json").Result;
var deserializedJson = JsonConvert.DeserializeObject<IEnumerable<IDictionary<string, string>>>(json);

foreach(var dictionary in deserializedJson)
{
Console.WriteLine(" -- Record --");

foreach(var keyValuePair in dictionary)
{
Console.WriteLine($"{keyValuePair.Key}:{keyValuePair.Value}");
}

Console.WriteLine();
}
}

输出:

Output

关于c# - 从动态 JSON 数组中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59372638/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com