gpt4 book ai didi

c# - 以数字为键反序列化 JSON

转载 作者:太空狗 更新时间:2023-10-29 23:31:40 25 4
gpt4 key购买 nike

编辑:我想出了如何获取每个键,现在问题是遍历每个集合。解决方案在底部!

我正在尝试解析具有以下格式的 JSON 负载:

{
"version": "1.1",
"0": {
"artist": "Artist 1",
"title": "Title 1"
},
"1": {
"artist": "Artist 2",
"title": "Title 2"
},
...
"29": {
"artist": "Artist 30",
"title": "Title 30"
}
}

我不需要 version键,所以我在编写类(class)代码时忽略了它。这是我目前所拥有的:

public class Song
{
public string artist { get; set; }
public string title { get; set; }
}

我查看了 StackOverflow,我看到有人使用 Dictionary<int, string>对于类似的问题,但看起来人们并没有在根目录中拥有每个 JSON 对象。我正在使用 JSON.net 来解析所有内容。

在 PHP 中,我可以轻松使用 json_decode()遍历数组并提取我需要的所有信息,但我被 C# 难住了。

编辑:解决方案从下面开始。

我查看了 JSON.net 文档,他们使用了字典,所以我尝试使用嵌套字典,它似乎有效!

Dictionary<int, Dictionary<string, string>> song = JsonConvert.DeserializeObject<Dictionary<int, Dictionary<string, string>>>(json);

我可以访问 artisttitle属性通过:

song[0]["artist"]
song[0]["title"]

分别。

这消除了对预建类的需要。现在,我无法遍历每组数据集合(例如歌曲 [1]、歌曲[2]、歌曲[3]、...、歌曲[n] 的艺术家和标题信息)。

最佳答案

如果您尝试反序列化为 Dictionary<int, Dictionary<string, string>>使用上面的 JSON,您将遇到 version 的问题键,因为它不符合字典的数据格式( version 不是 int1.1 不是 Dictionary<string, string> )。我知道您说您“暂时忽略它”,但这意味着它将来会存在,因此您需要处理它。

如果您不想使用预定义的类,那么最好使用 Json.Net 的 LINQ-to-JSON API处理数据。以下是使用此方法获取所需数据的方法:

class Program
{
static void Main(string[] args)
{
string json = @"
{
""version"": ""1.1"",
""0"": {
""artist"": ""Artist 1"",
""title"": ""Title 1""
},
""1"": {
""artist"": ""Artist 2"",
""title"": ""Title 2""
},
""29"": {
""artist"": ""Artist 30"",
""title"": ""Title 30""
}
}";

JObject songs = JObject.Parse(json);

foreach (JProperty song in songs.Properties())
{
if (song.Name == "version") continue; // skip "version" property
Console.WriteLine("Song " + song.Name + " artist: " + song.Value["artist"]);
Console.WriteLine("Song " + song.Name + " title: " + song.Value["title"]);
}
}
}

输出:

Song 0 artist: Artist 1
Song 0 title: Title 1
Song 1 artist: Artist 2
Song 1 title: Title 2
Song 29 artist: Artist 30
Song 29 title: Title 30

documentation 中还有许多其他示例.

关于c# - 以数字为键反序列化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20110988/

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