【问题标题】:Create IronPython dictionary from JObject从 JObject 创建 IronPython 字典
【发布时间】:2016-05-14 18:56:12
【问题描述】:

我正在尝试为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 对象的深度会有所不同,因此我需要灵活处理。

【问题讨论】:

    标签: c# python dictionary json.net ironpython


    【解决方案1】:

    对我来说很好。

    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 的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 2016-11-20
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多