将具有指定属性的JSON对象数组转换为Dictionary

本文关键字:数组 对象 转换 Dictionary JSON 属性 | 更新日期: 2023-09-27 18:03:28

我需要转换为字典JSON数组的对象与键"id"和值"score"属性,如以下

[{"score":0.6990418,"id":"4833909335"},
{"score":0.8079009,"id":"4833874639"},
{"score":0.8079009,"id":"4834247506"}].

字典键值应该有"id"属性值,并且字典值应该从"score"复制。

注意,它不是反序列化,而是当一些信息没有复制到目标对象时的转换/映射(例如:属性和其他潜在属性的名称)

我发现了类似的问题如何将对象的json数组反序列化到字典,这被错误地关闭为关于反序列化具有多个属性的不同json对象的不同问题的副本。我试着重新打开它,但是没有成功。

将具有指定属性的JSON对象数组转换为Dictionary

我已经创建了扩展方法来允许从JSON数组的元素中提取一对属性

  public static Dictionary< string, string> JsonArrayToDictionary( string strJson, string keyName,string valueName)
        {
            var array = JArray.Parse(strJson) ;
            var dictionary = JsonArrayToDictionary(array, keyName, valueName);
            return dictionary;
        }
        public static Dictionary<string , string > JsonArrayToDictionary(this JArray array, string keyName, string valueName)
        {
            if (array != null)
            {
                var dict = array.ToDictionary(x => x[keyName].ToString(), x => x[valueName].ToString());
                return dict;
            }
            return null;
        }

 [TestClass()]
    public class JsonHelperExtensionsTests
    {
        [ TestMethod()]
        public void JsonArrayToDictionaryTest()
        {
            var jsonArray= @"[{""score "":0.6990418,"" id"": ""ID1"" },{""score "":0.8079009,"" id"": ""ID2"" }]";
           var dict= JsonHelperExtensions.JsonArrayToDictionary(jsonArray, "id" , "score");
            dict.Count.Should().Be(2);
            dict[ "ID1"].Should().Be("0.6990418" );
        }
    }

当前时间的当前解决方案:

var jsArray = JObject.Parse(response);
var arrayDictionary = JsonConvert.DeserializeObject<Dictionary<string, dynamic>[]>(jsArray.ToString());