使用Dictionary.ValueCollection解析JSON数组

本文关键字:JSON 数组 解析 ValueCollection Dictionary 使用 | 更新日期: 2023-09-27 17:59:06

我正在处理JSON文件中Dictionary的嵌套/valuecollection元素。从我对stackoverflow的研究来看,有一些标准JSON文件的例子,但没有数组。我是用Unity3D和C#写这篇文章的,所以我只限于.NET 2.0框架和使用MiniJSON来解析JSON,但我真正不知道的是如何迭代项目并添加到我的自定义类的List或Dictionary中。

我要做的是:

我的JSON文件

{ 
    "circle": [
    {
        "density": 2, "friction": 0, "bounce": 0, 
        "filter": { "categoryBits": 1, "maskBits": 65535 },
        "shape": [   148.5, 91  ,  144.5, 104  ,  58, 148.5  ,  45, 144.5  ,  64, -0.5  ,  65, -0.5  ,  144.5, 45  ,  149.5, 63  ]
    },
    {
        "density": 2, "friction": 0, "bounce": 0, 
        "filter": { "categoryBits": 1, "maskBits": 65535 },
        "shape": [   58, 148.5  ,  144.5, 104  ,  117, 137.5  ,  104, 144.5  ,  86, 149.5  ]
    },
    {
        "density": 2, "friction": 0, "bounce": 0, 
        "filter": { "categoryBits": 1, "maskBits": 65535 },
        "shape": [   0.5, 58  ,  4.5, 45  ,  64, -0.5  ,  45, 144.5  ,  11.5, 117  ,  4.5, 104  ,  -0.5, 86  ]
    },
    {
        "density": 2, "friction": 0, "bounce": 0, 
        "filter": { "categoryBits": 1, "maskBits": 65535 },
        "shape": [   134, 27.5  ,  140.5, 37  ,  144.5, 45  ,  65, -0.5  ,  86, -0.5  ,  95, 1.5  ,  104, 4.5  ,  121, 14.5  ]
    },
    {
        "density": 2, "friction": 0, "bounce": 0, 
        "filter": { "categoryBits": 1, "maskBits": 65535 },
        "shape": [   64, -0.5  ,  4.5, 45  ,  11.5, 32  ,  32, 11.5  ,  45, 4.5  ]
    },
    {
        "density": 2, "friction": 0, "bounce": 0, 
        "filter": { "categoryBits": 1, "maskBits": 65535 },
        "shape": [   117, 137.5  ,  144.5, 104  ,  137.5, 117  ]
    },
    {
        "density": 2, "friction": 0, "bounce": 0, 
        "filter": { "categoryBits": 1, "maskBits": 65535 },
        "shape": [   11.5, 117  ,  45, 144.5  ,  32, 137.5  ]
    }
]
}

我在C#类中打开并解析根元素"circles",如下所示。这基本上是从我的文件夹中获取文本文件,并加载到一个初始字典:

TextAsset jsonTextAsset = Resources.Load(_dataPath, typeof(TextAsset)) as TextAsset; 
Dictionary<string, object> dict = jsonTextAsset.text.dictionaryFromJson();
Debug.Log ("Count: " + dict.Count);

计数显示我有1根元素。此外,如果我通过调试器进行检查,我会看到7个项目集合,其中6个显示在JSON文件中,还有一个空项目。

我不明白的是我该如何抓住它。

我创建了以下类,以潜在地创建自定义列表或字典类型:

public class FPObject 
{
    public int Density { get; set; }
    public int Friction { get; set; }
    public int Bounce { get; set; }
    public int CategoryBits { get; set; }
    public int MaskBits { get; set; }
    public double[] Shape { get; set; }
}

我觉得我已经很接近了,但我对JSON和Dictionaries都没有足够的经验来完成这项工作。

使用Dictionary.ValueCollection解析JSON数组

您必须创建正确的类,我希望以下代码能帮助您:

注意:我使用了JSON.Net而不是MiniJSON。

    public class RootJson
    {
        public List<Circle> CircleList { get; set; }
    }
    public class Circle
    {
        public int Density { get; set; }
        public int Friction { get; set; }
        public int Bounce { get; set; }
        public Filter CategoryBits { get; set; }
        public List<double> Shape { get; set; }
    }
    public class Filter
    {
        public int CategoryBits { get; set; }
        public int MaskBits { get; set; }
    }
    private void button4_Click(object sender, EventArgs e)
    {
        string Json = System.IO.File.ReadAllText(@"JsonFilePath");
        RootJson JCircle = JsonConvert.DeserializeObject<RootJson>(Json);
        Debug.Print(JCircle.CircleList.Count.ToString());
    }