JSON数组到字典

Posted

技术标签:

【中文标题】JSON数组到字典【英文标题】:JSON array to Dictionary 【发布时间】:2020-07-12 22:12:06 【问题描述】:

我正在尝试使用 NewtonsoftJson 将 JSON 反序列化为 C# 对象。

我的 json 看起来像这样:

"something" : [ "key1" : "value1", "key2" : "value2"]

但这不是一个完整的 json。所以它应该是大物体的一部分。 我不能使用这个解决方案JSON array to C# Dictionary 因为我用

JsonConvert.DeserializeObject<MyObject>(json);

可以这样初始化对象吗?

public class Something
   
    [JsonProperty]
    public Dictionary<string, string> MyDictionary;

但是当我尝试这样做时,我得到了异常:

Newtonsoft.Json.JsonSerializationException: '无法反序列化 当前 JSON 数组(例如 [1,2,3])转换为类型 'System.Collections.Generic.Dictionary`2[System.String,ConsoleApp4.TxPerfMeasurements]' 因为该类型需要一个 JSON 对象(例如 "name":"value") 正确反序列化。要修复此错误,请将 JSON 更改为 JSON 对象(例如 "name":"value")或将反序列化类型更改为 实现集合接口的数组或类型(例如 ICollection, IList) 之类的可以从 JSON 反序列化的 List 大批。 JsonArrayAttribute 也可以添加到类型中以强制它 从 JSON 数组反序列化。

【问题讨论】:

这不是有效的 JSON,你可以在这里试试jsonformatter.curiousconcept.com 那不是有效的 JSON,你能确保你没有在这里歪曲实际问题吗?您所展示的示例的问题是您不能拥有一个键值对数组,这是一个对象。所以它要么必须是一个元素数组,在这种情况下冒号不应该在那里,要么它必须是一个对象,在这种情况下它应该使用...而不是[...]。使用当前的示例数据,无论您尝试将其反序列化为何种类型,都无法让 Json.Net 反序列化它。请确保您有正确的输入示例。 对不起,我忘了刹车,实际上是这样的:"something":["key1":"value1","key2":"value2"]跨度> 【参考方案1】:

输入


  "something": [
     "key1": "value1" ,
     "key2": "value2" 
  ]

您的模型应如下所示

public class Something
   
    public List<Dictionary<string, string>> something  get; set; 

使用 Linq 转换为 Dictionary

var result = JsonConvert.DeserializeObject<Something>(json);
var dict = result.something.SelectMany(d => d).ToDictionary(e => e.Key, e => e.Value);

输出

【讨论】:

以上是关于JSON数组到字典的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将数组添加到我的 JSON 字典

swift 3中从数组到字典的JSON解析问题

如何检查json返回值是数组还是字典的形式

如何在 swift 3 中使用 Alamofire 制作和发送字典数组(JSON 格式)发送到服务器

使用 swift 2.1 遍历一个 JSON 命名的字典数组

如何在iOS(目标c)中发送带有字典和数组的JSON?