【问题标题】:How to convert string to list of dictionary如何将字符串转换为字典列表
【发布时间】:2020-02-26 13:19:40
【问题描述】:

我有一个来自 http 响应的字符串

data = "[{'value':123,'Type':'Range'},{'value':456,'Type':'Fixed'}]"

如何将其转换为 c# 中的 dict 列表

【问题讨论】:

  • 那个字符串是almost, but not quite, entirely unlike JSON。你确定它使用单引号而不是双引号?
  • 我很确定单引号而不是双引号对于 Json.net 来说没有问题
  • 对我来说主要问题是预期的结果:“字典列表”。你介意多解释一点吗?如果字典只有两个始终相同的键,为什么要字典。在我看来,它真的像一个 List 对象。
  • 反序列化它:dotnetfiddle.net/bIPFfX.
  • @canton7,似乎很难找到一个严格遵守 RFC 的解析器。严格模式是2015年github.com/JamesNK/Newtonsoft.Json/issues/646的请求。

标签: c# string dictionary


【解决方案1】:

那里应该没有问题。

使用deserialisingList<customObject>List<Dictionary<string,string>>
使用Json.net 库。

public class Data{
    public string value{get;set;}
    public string Type{get;set;}
}

var testClass = JsonConvert.DeserializeObject<List<Data>>(input);   

对象转储:

Dumping object(System.Collections.Generic.List`1[Data])  
[  
   {  
       Type   : Range  
       value  : 123  
   },  
   {  
       Type   : Fixed  
       value  : 456  
   }  
]

或者直接:

var testDict = JsonConvert.DeserializeObject<List<Dictionary<string,string>>>(input);   

结果:

Dumping object(  
  System.Collections.Generic.List`1[System.Collections.Generic.Dictionary`2[String,String]])  
[  
   {  
    [  
           [value, 123]  
           ,  
           [Type, Range]  
    ]   },  
       {  
    [  
           [value, 456]  
           ,  
           [Type, Fixed]  
    ]     
   }  
]  

别忘了using Newtonsoft.Json;

LiveDemo

【讨论】:

  • 如何转换 ['key1':{'name':'as', 'age':'25'},'key2': {'name':'sd', 'age ':'25', 'qwed':'qwe'}]
  • @Iceberg,不是有效的 Json。 json.org/json-en.html。它以 [ 开头。所以它是一个数组,但里面的值是"key1":{"name":"as", "age":"25"}。那要么缺少{},因为它是一个对象,要么完全不是一个数组,所以[]必须变成{}
【解决方案2】:

更好的方法是使用简单的对象列表: 首先创建如下类

     public class respObject
     {
       public int Value { get; set; }
       public string  Type { get; set; }
     }

然后使用 Newtonsoft.Json 反序列化对象 作为

        var data = "[{'value':123,'Type':'Range'},{'value':456,'Type':'Fixed'}]";

        var objList = JsonConvert.DeserializeObject<List<respObject>>(data);

但是回答你的dict问题列表

         var data = "[{'value':123,'Type':'Range'},{'value':456,'Type':'Fixed'}]";

         var listDict = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(data);

【讨论】:

  • 如何转换 ['key1':{'name':'as', 'age':'25'},'key2': {'name':'sd', 'age ':'25', 'qwed':'qwe'}]
【解决方案3】:

你可以试试JArray

var data = "[{'value':123,'Type':'Range'},{'value':456,'Type':'Fixed'}]";
var dict = JArray.Parse(data)
                 .ToDictionary(k => k["value"].ToString(), v => v["Type"].ToString());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 2014-05-23
    • 2019-05-29
    • 2015-06-25
    相关资源
    最近更新 更多