c# - 读取 json 文件并使用 JSON.NET 更改它

标签 c# json winforms json.net

JSON 对我来说真的很陌生。我如何使用 JSON.NET 将键值对添加到已创建的 json 文件中?

看起来像这样:

{
"data": {
    "subData1": {
        "key1":"value1",
        "key2":"value2",
        "key3":"value3"
    },
    "subdata2": {
        "key4":"value4",
        "key5":"value5",
        "key6":"value6"
    }
}
"key7":"value7",
"key8":"value8"     
}

举个例子,我想把它改成下面这样:

{
"data": {
    "subData1": {
        "key1":"value1",
        "key2":"value2",
        "key3":"value3"
    },
    "subdata2": {
        "key4":"value4",
        "key5":"value5",
        "key6":"value6"
    },
    "newSubData": {
        "myKey1":"myVal1",
        "myKey2":"myVal2",
        "myKey3":"myVal3"
    }
}
"key7":"anotherValChangeByMe",
"key8":"value8"     
}

我是否需要将整个 JSON 文件读入动态文件,然后以某种方式更改/添加我需要的内容?

最佳答案

您可以将 JSON 解析为 JObject,通过 LINQ-to-JSON 对其进行操作API,然后从 JObject 中获取更新后的 JSON 字符串。

例如:

string json = @"
{
    ""data"": {
        ""subData1"": {
            ""key1"": ""value1"",
            ""key2"": ""value2"",
            ""key3"": ""value3""
        },
        ""subdata2"": {
            ""key4"": ""value4"",
            ""key5"": ""value5"",
            ""key6"": ""value6""
        }
    },
    ""key7"": ""value7"",
    ""key8"": ""value8""
}";

JObject root = JObject.Parse(json);
JObject data = (JObject)root["data"];
JObject newSubData = new JObject();
newSubData.Add("myKey1", "myValue1");
newSubData.Add("myKey2", "myValue2");
newSubData.Add("myKey3", "myValue3");
data.Add("newSubData", newSubData);
root["key7"] = "anotherValChangeByMe";

Console.WriteLine(root.ToString());

输出:

{
  "data": {
    "subData1": {
      "key1": "value1",
      "key2": "value2",
      "key3": "value3"
    },
    "subdata2": {
      "key4": "value4",
      "key5": "value5",
      "key6": "value6"
    },
    "newSubData": {
      "myKey1": "myValue1",
      "myKey2": "myValue2",
      "myKey3": "myValue3"
    }
  },
  "key7": "anotherValChangeByMe",
  "key8": "value8"
}

关于c# - 读取 json 文件并使用 JSON.NET 更改它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26371384/

相关文章:

ruby-on-rails - 模型属性的 JBuilder 动态键

c# - 我怎样才能使字符串变量的字体颜色在 c# 代码的消息框中变红?

c# - 检测没有子项的 mdiContainer 上的双击(c# winforms)

c# - 为什么在同一个实例中使用多个数据库在 Redis 中不是一个好主意?

c# - 在流式传输 Web 请求时使用 StreamReader 流 .NET?

json - 我希望将雅虎财经 API 过滤为仅出价在 0 美元到 10 美元之间的股票

javascript - 树布局 - 链接 - 数据格式

vb.net - 停止在 UserControl 的特定区域引发 Click 事件

c# - 默认路由更改 ASP .Net 5 MVC 6

c# - 在 LINQ 查询中检查 NULL 的小数