如何从 JSON 转换/转换值
本文关键字:转换 JSON | 更新日期: 2023-09-27 18:31:07
我的背景都是动态语言多年,所以关于静态类型语言如何从JSON获取数据(键/值可以是不同类型的)的推理成为一个真正让我卡住的问题。以下是我拥有的数据示例:
{
"par": 4,
"level": [0,1,0,1,1, 0,1,0,1,1, 0,1,0,1,1, 0,1,0,1,1, 0,1,0,1,1]
}
我想把它变成一些局部变量,比如
int par;
List<bool> levelData;
我正在使用 MiniJSON.cs 进行解析,它给了我Dictionary<string, object>
,但我无法弄清楚如何从中获取 par 和 level 值并将它们转换为它们实际表示的不同类型。
尝试转换为List<int>
的问题在于 MiniJSON 将整数解析为 Int64
,int
是 32 位,因此由于数据丢失,不允许隐式转换。转换为Int64
工作列表!
List<Int64> cells = (List<Int64>)data["level"];
您必须提供一个将字典转换为类型化数据结构的"解码器"。这一点尤其明显,因为您使用0
和1
来表示布尔值。
假设类SomeClass
保存键入的数据。解码器必须执行以下操作:
SomeClass decode(Dictionary<string,object> d) {
var m = new SomeClass();
m.par = (int)d["par"];
m.levelData = ((List)d["level"]).Select(x => (int)x == 0 ? false : true).ToList();
return m;
}
因此,基本上您必须将(非类型化)对象转换为类型化值,并且必须显式执行此操作。请注意,这里假设您的零和一列表是同质的(即不包含像字符串这样的"奇怪"值,这在动态类型语言中是完全合法的)。