首页 > 解决方案 > 在 C# 中编辑 JSON 文件

问题描述

我正在尝试编辑 JSON 文件以附加一个值。但是,我找不到获得预期结果的方法。鉴于以下 JSON:

{
   "First": "1",
   "Second": "2",
   "A_lot": [
      { 
         "Address":"Str" 
      },
      { 
         "Fruits" : [ "apple", "orange" ],
         "colors": : [] 
      }
   ], 
   "last": "end 
}

我想添加一个名为香蕉的水果和我的 JSON 来查看

{
   "First": "1",
   "Second": "2",
   "A_lot": [
      { 
         "Address":"Str" 
      },
      { 
         "Fruits" : [ "apple", "orange", "banana" ],
         "colors:" : [] 
      }
   ], 
   "last": "end 
}

我在网上搜索,但我找不到任何相关的东西。当我试图运行它时:

 var myjson = File.ReadAllText(pathtojson);
 JObject newDeploymentProfileDocument = JObject.Parse(myjson);

 var deploymentProperties = newDeploymentProfileDocument["A_lot"][1];

 var myFruit = "banana";
 deploymentProperties["Fruits"].AddAfterSelf(myFruit);

 File.WriteAllText(myjson, newDeploymentProfileDocument.ToString());

我收到以下错误:

Newtonsoft.Json.JsonException: 'Newtonsoft.Json.Linq.JProperty 不能有多个值。

由于我是 C# 的新手,更不用说 C# 和 json 文件了,你能指出我缺少什么吗?提前致谢

标签: c#jsonjson.net

解决方案


您发送的 JSON 格式似乎不正确。如果你的意思是这样的:

{
  "First": "1",
  "Second": "2",
  "A_lot": [
    {
      "Address": "Str",
      "Fruits": [ "apple", "orange" ],
      "colors": []
    }
  ],
  "last": "end"
}

正如评论中提到的其他人一样,只需这样做:

    ...
    var deploymentProperties = (JArray)newDeploymentProfileDocument["A_lot"][0]["Fruits"];
    var myFruit = "banana";
    deploymentProperties.Add(myFruit);
    ...

已编辑

如果你不想改变你的 JSON 结构,你可以使用这个:

var deploymentProperties = (JArray)newDeploymentProfileDocument["A_lot"][1]["Fruits"];
var myFruit = "banana";
deploymentProperties.Add(myFruit);

推荐阅读