【问题标题】:Add a new entry to the json file向 json 文件添加新条目
【发布时间】:2019-12-09 09:37:44
【问题描述】:

我有一个格式如下的 JSON 文件:

    {
      "profiles": {
        "Profile1": {
          "name": "Nombre 1",
          "lastVersionId": "14.23.5.2838",
          "javaArgs": "-Xmx8G"
        },
        "Profile2": {
          "name": "Nombre 2",
          "lastVersionId": "58.96.004",
          "javaArgs": "-Xmx8G"
        }
      },
      "selectedProfile": "Profile1"
    }

我需要添加一个新的配置文件,即添加这整个块:

    "Profile3": {
      "name": "Nombre 3",
      "lastVersionId": "58.96.004",
      "javaArgs": "-Xmx8G"
    }

我忘了说我不知道​​JSON的所有字段,所以我不能使用类来反序列化。

我已经尝试了在 stackoverflow 中找到的一千个代码,但大多数代码仅用于添加单个字段或编辑现有字段的值。我在 vb.net 上使用 Newtonsoft

我将不胜感激。

【问题讨论】:

    标签: c# .net json json.net


    【解决方案1】:

    在不使用类的情况下添加的一种方法是创建一个 JObject 并将其插入到配置文件中。

        dynamic jsonObject = JsonConvert.DeserializeObject(json);
    
        var profile3 = new JObject
        {
            ["name"] = "Nombre 3",
            ["lastVersionID"] = "58.96.004",
            ["javaArgs"] = "-Xmx8G"
        };
        jsonObject["profiles"]["Profile3"] = profile3;
    

    由于您提到“我不知道 JSON 的所有字段”,因此很难使用方法来实例化配置文件(例如每次使用方法创建相同的对象,但如果不同,它将具有手动创建和插入。

    编辑: 要从内部元素中移除 obj,请使用 Property 和 Remove()。如果要包括检查空对象,请使用 ?.Remove()。

    jsonObject["profiles"].Property("Profile3")?.Remove();
    



    编辑2: 您也可以在更新之前检查配置文件是否存在。

    Console.WriteLine(jsonObject["profiles"]["Profile4"] != null);
    
    // output:
    False
    

    【讨论】:

    • 我在研究非常大的例子,没想到这么简单,非常感谢,还有别的,如果可能的话,你知道如何删除现有的个人资料吗?
    • 我无法转换为 .net,但我会寻找更多相关信息,再次感谢。
    猜你喜欢
    • 2020-09-07
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多