VB.Net-从现有JObject中的属性子集创建JObject



我正在UIPath中工作,并试图为一个库组合一个JSON配置文件。我对VB.Net中可以使用的功能有点手足无措,但我想按环境过滤我的属性。我能够成功地过滤掉我不关心的环境,但我坚持使用JSON结构最高级别的现有环境属性。在我知道我想保留哪一个之后,我也想把它扔掉。

起点

{
"Development": {
"Database": {
"DB 1": {
"Server": "Foo",
"Application Name": "App1"
},
"DB 2": {
"Server": "Boo",
"Application Name": "App2"
}
}
},
"Production": {
"Database": {
"DB 1": {
"Server": "FooFoo",
"Application Name": "App1"
},
"DB 2": {
"Server": "BarBar",
"Application Name": "App2"
}
}
}

基于环境(开发或生产(,我想得到什么

{
"Database": {
"DB 1": {
"Server": "Foo",
"Application Name": "App1"
},
"DB 2": {
"Server": "Boo",
"Application Name": "App2"
}
}

以下是我迄今为止所尝试的:

  1. 将JSON文件读取为字符串

  2. 反序列化为Newtonsoft JObject

  3. 按环境过滤

    configData.Descendants
    .OfType(Of JProperty)
    .Where(Function(attr) attr.Name.ToUpper = "PRODUCTION" Or attr.Name.ToUpper = "DEVELOPMENT" And attr.Name.ToUpper <> environment.ToUpper)
    .ToList()
    .ForEach(Sub(attr) attr.Remove())
    

结果

{
"Development": {
"Database": {
"DB 1": {
"Server": "Foo",
"Application Name": "App1"
},
"DB 2": {
"Server": "Boo",
"Application Name": "App2"
}
}
}

从这里开始,我陷入了困境,似乎什么都做不了。我希望能够访问我的配置属性,而调用方不知道它在什么环境中。

类似的东西

configuration("Database")("DB 1")

configuration(environment)("Database")("DB 1")

如果我在这件事上采取了愚蠢的做法,我也会接受这个答案。我从来没有真正玩过VB或。以前的网络,所以对我来说都是全新的。我理解一些东西,但还远远没有真正理解任何强大的东西。

Dim environment = "Development"
Dim filteredJson = JObject.Parse(yourJson)(environment).ToString

会给你

{
"Database": {
"DB 1": {
"Server": "Foo",
"Application Name": "App1"
},
"DB 2": {
"Server": "Boo",
"Application Name": "App2"
}
}
}

替换";生产";对于";"发展";当然,在适当的时候。

请注意,json示例中缺少一个右大括号

最新更新