从 JObject 创建 IronPython 字典
Create IronPython dictionary from JObject
我正在尝试为 IronPython
的脚本范围设置一个变量。我想将 JObject
用作 Python 字典。这是我试过的。
ScriptScope scope = engine.CreateScope();
JObject childObject = new JObject();
childObject["child1"] = "test";
JObject dataObject = new JObject();
dataObject["key1"] = childObject;
scope.SetVariable("metaData", dataObject);
我可以使用metaData
变量,也可以通过调用metaData["key1"]
来使用第一个键。但是,当我尝试通过调用 metaData["key1"]["child1"]
获取下一个值时,我收到以下错误消息: Can not convert from System.String to System.Object.
如何使用我的 JSON 对象,就好像它是一个普通的 Python字典?我的 JSON 对象的深度会有所不同,因此我需要灵活应对。
对我来说很好。
var engine = Python.CreateEngine();
dynamic scope = engine.CreateScope();
scope.metaData = new JObject
{
["key1"] = new JObject
{
["child1"] = "test",
},
};
engine.Execute(@"
print metaData['key1']['child1']
foo = metaData['key1']
foo['bar'] = 'baz'
print metaData
", scope);
打印:
test
{
"key1": {
"child1": "test",
"bar": "baz"
}
}
这取决于您在脚本中对对象执行的操作。
请注意,在幕后,它仍然是一个普通的旧 json.net JObject
,您无法为其增加任何价值。例如,您不能添加 IronPython dict
。它必须是可以或隐式转换为 JToken
.
的东西
我正在尝试为 IronPython
的脚本范围设置一个变量。我想将 JObject
用作 Python 字典。这是我试过的。
ScriptScope scope = engine.CreateScope();
JObject childObject = new JObject();
childObject["child1"] = "test";
JObject dataObject = new JObject();
dataObject["key1"] = childObject;
scope.SetVariable("metaData", dataObject);
我可以使用metaData
变量,也可以通过调用metaData["key1"]
来使用第一个键。但是,当我尝试通过调用 metaData["key1"]["child1"]
获取下一个值时,我收到以下错误消息: Can not convert from System.String to System.Object.
如何使用我的 JSON 对象,就好像它是一个普通的 Python字典?我的 JSON 对象的深度会有所不同,因此我需要灵活应对。
对我来说很好。
var engine = Python.CreateEngine();
dynamic scope = engine.CreateScope();
scope.metaData = new JObject
{
["key1"] = new JObject
{
["child1"] = "test",
},
};
engine.Execute(@"
print metaData['key1']['child1']
foo = metaData['key1']
foo['bar'] = 'baz'
print metaData
", scope);
打印:
test
{
"key1": {
"child1": "test",
"bar": "baz"
}
}
这取决于您在脚本中对对象执行的操作。
请注意,在幕后,它仍然是一个普通的旧 json.net JObject
,您无法为其增加任何价值。例如,您不能添加 IronPython dict
。它必须是可以或隐式转换为 JToken
.