使用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都没有足够的经验来完成这项工作。
您必须创建正确的类,我希望以下代码能帮助您:
注意:我使用了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());
}