【问题标题】:How do I append an JsonProperty to another JsonProperty如何将 JsonProperty 附加到另一个 JsonProperty
【发布时间】:2021-02-05 13:16:07
【问题描述】:

我有这个看起来像这样的 JsonDocument

string jsonString = "{\"year\": 0, \"class\": [], \"schools\": []}";
JsonDocument newSchema = JsonDocument.Parse(jsonString)

还有一堆 JSON 文件,其中包含这些属性。 每个 JSON 文件都有相同的year,但包含一个特定的class 和一个特定的school 的信息。除了year之外,它们都不相同。

我试图创建一个包含所有 class 的 JsonDocument,并将学校放在一个 JsonDocument 中,但似乎在将 JsonProperty 附加在一起时遇到了问题..

这是我迄今为止尝试过的:

using (JsonDocument newSchema = JsonDocument.Parse(jsonString))
{
    List<JsonProperty> properties = new List<JsonProperty>();
    foreach(JsonProperty a in newSchema.RootElement.EnumerateObject())
    {
        properties.Add(a);
    }
    foreach (string classandSchoolDefinition in loadableSchemaDefinitions)
    {

        string schemaDefinitionAsJson = File.ReadAllText(classandSchoolDefinition );
        JsonDocument schemaJson = JsonDocument.Parse(schemaDefinitionAsJson);

        foreach (JsonProperty a in schemaJson.RootElement.EnumerateObject())
        {
            switch (a.Name)
            {
                case "year":
                    Console.WriteLine($@"({a.Name}+{a.Value}, {a.Value.ValueKind})");
                    break;
                case "class":
                    Console.WriteLine($@"({a.Name}+{a.Value}, {a.Value.ValueKind})");
                    break;
                case "school":
                    Console.WriteLine($@"({a.Name}+{a.Value}, {a.Value.ValueKind})");
                    break;
                default:
                    break;
            }
        }
    }

如何将每个Jsonproperty 值连接到一个组合newSchema,而不是保持为一个?
在这种情况下,我只想将一个数组附加到另​​一个数组。

【问题讨论】:

  • 我试图创建一个 JsonDocument,将所有班级和学校放在一个 JsonDocument 中, -- 你能解释一下你想怎么做吗?从您的问题中不清楚正确的合并算法应该是什么。也许您可以 edit 您的问题包括几个示例文件和所需的结果 - 即 minimal reproducible example?
  • @dbc - newSchema 不包含班级和学校,但是每个 json 文件在 EnumerableArray 字段类和学校中都包含一个 EnumerableObject,可以在 json 文件中找到的每个 EnumberableObject 都有被添加到 EnumerableArray。
  • 我需要一个 AddEnumerableObjectToEnumerableArray(array, object) 函数
  • 您能否分享几个简单的 JSON 示例作为字符串,显示您的输入和所需的输出?您只想连接"class""schools" 数组吗?如果"year" 值不同会怎样?
  • 我对@9​​87654336@ atm 不感兴趣,但如果它们不同,它应该会失败。

标签: c# asp.net system.text.json


【解决方案1】:

您可以使用 Newtonsoft.Json 实现这一目标

例如,你有

var o1 = JObject.Parse(@"{
  'Name': 'Max',
  'Enabled': false,
  'Roles': [ 'User' ]
}");

和另一个对象

var o2 = JObject.Parse(@"{
  'Enabled': true,
  'Roles': [ 'User', 'Admin' ]
}");

只需像这样使用 Merge 功能 -

o1.Merge(o2, new JsonMergeSettings
{
    // to avoid duplicates
    MergeArrayHandling = MergeArrayHandling.Union
});

结果将是 -

{
   "FirstName": "Max",
   "Enabled": true,
   "Roles": [
      "User",
      "Admin"
  ]
}

【讨论】:

猜你喜欢
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多