【问题标题】:Convert json string into multidimensional array将json字符串转换为多维数组
【发布时间】:2014-09-23 13:08:26
【问题描述】:

目前这是我的 JSON 数组:

{"1": [{"11": [[1, 1],[2, 2],[3, 3]],"21": [[1, 1],[2, 2],[3, 3]],"31": [[1, 1],[2, 2],[3, 3]]}],"4": [{"12": [[1, 1],[2, 2],[3, 3]],"22": [[1, 1],[2, 2],[3, 3]],"32": [[1, 1],[2, 2],[3, 3]]}],"6": [{"13": [[1, 1],[2, 2],[3, 3]],"23": [[1, 1],[2, 2],[3, 3]],"33": [[1, 1],[2, 2],[3, 3]]}]}

我想把它转换成Dictionary<int, Dictionary<int, Dictionary<int, int>>>

我已经搜索了很长时间,但找不到可能的解决方案。到目前为止,我有:

Dictionary<int, Dictionary<int, Dictionary<int, int>>> menus = new Dictionary<int, Dictionary<int, Dictionary<int, int>>>();

        JToken entireJson = JToken.Parse(rawDirectory);

        foreach (var item in entireJson.Children())
        {
            var property = item as JProperty;
            var subArray = new Dictionary<int, Dictionary<int, int>>();
            foreach (var subItem in property.Value.Children())
            {
                var subProperty = subItem as JProperty;
                var subSubArray = new Dictionary<int, int>();
                foreach (var subSubItem in subItem)
                {
                    var subSubProperty = subSubItem as JProperty;
                    subSubArray.Add(int.Parse(subSubProperty.Name), int.Parse((String)subSubProperty.Value));
                }
                subArray.Add(int.Parse(subProperty.Name), subSubArray);
            }
            menus.Add(int.Parse(property.Name), subArray);
        }

编辑 - 解决方案

要生成我想要的Dictionary&lt;&gt;,我必须稍微更改一下 JSON 数组。当您使用方括号 [] 时,它会创建一个 List&lt;&gt;。当您使用大括号时,您可以生成Dictionary&lt;&gt;

我已通过将 jSON 字符串更改为:

{"1": {"11": {"1": 1,"2": 2,"3": 3},"21": {"1": 1,"2": 2,"3": 3},"31": {"1": 1,"2": 2,"3": 3}},"4": {"12": {"1": 1,"2": 2,"3": 3},"22": {"1": 1,"2": 2,"3": 3},"32": {"1": 1,"2": 2,"3": 3}},"6": {"13": {"1": 1,"2": 2,"3": 3},"23": {"1": 1,"2": 2,"3": 3},"33": {"1": 1,"2": 2,"3": 3}}}

并使用以下代码进行反序列化:

JsonConvert.DeserializeObject < Dictionary<int, Dictionary<int, Dictionary<int, int>>>>(jSONString)

这就是我生成三维数组的方式:

"{" + string.Join(",", dict.Select(a => String.Format("\"{0}\": {1}", a.Key, String.Join(",", "{" + String.Join(",", a.Value.Select(b => String.Format("\"{0}\": {1}", b.Key, String.Join(",", "{" + String.Join(",", b.Value.Select(c => String.Format("\"{0}\": {1}", c.Key, String.Join(",", c.Value)))) + "}")))) + "}")))) + "}"

【问题讨论】:

  • 您能否在问题中添加您的代码有什么问题?
  • @fxm 为您服务!

标签: c# arrays json multidimensional-array


【解决方案1】:

当您尝试解析时,您的 json 不是 Dictionary&lt;int, Dictionary&lt;int, Dictionary&lt;int, int&gt;&gt;&gt;

Dictionary&lt;int,List&lt;Dictionary&lt;int,List&lt;List&lt;int&gt;&gt;&gt;&gt;&gt;

下面的代码可行,但使用这种结构并不容易。


string json = @"{""1"": [{""11"": [[1, 1],[2, 2],[3, 3]],""21"": [[1, 1],[2, 2],[3, 3]],""31"": [[1, 1],[2, 2],[3, 3]]}],""4"": [{""12"": [[1, 1],[2, 2],[3, 3]],""22"": [[1, 1],[2, 2],[3, 3]],""32"": [[1, 1],[2, 2],[3, 3]]}],""6"": [{""13"": [[1, 1],[2, 2],[3, 3]],""23"": [[1, 1],[2, 2],[3, 3]],""33"": [[1, 1],[2, 2],[3, 3]]}]}";

var dict = JsonConvert.DeserializeObject<Dictionary<int,List<Dictionary<int,List<List<int>>>>>>(json);

【讨论】:

  • +1 谢谢!我想我不明白 json 字符串。我已经改变了一点,所以我可以使用Dictionary&lt;int, Dictionary&lt;int, Dictionary&lt;int, int&gt;&gt;
猜你喜欢
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 2012-11-17
相关资源
最近更新 更多