【问题标题】:Add a field into JSON array在 JSON 数组中添加一个字段
【发布时间】:2017-01-17 21:31:51
【问题描述】:

我得到了一个 JSON 字符串,其中包含这样的数组:

 {
  "Id": 123,
  "Username": "Sr. X",
  "Packages": [
    {
      "Name": "Cups",
      "SupplierId": 1,
      "ProviderGroupId": 575,
      "SupplierName": "Foo Cups"
    },
    {
      "Name": "Pins",
      "SupplierId": 5,
      "ProviderGroupId": 1082,
      "SupplierName": "Foo Pins"
    }
  ]
}

我想在 Packages 数组中添加一个新字段,例如:

"Packages": [
    {
      "Name": "Cups",
      "SupplierId": 1,
      "ProviderGroupId": 575,
      "SupplierName": "Foo Cups",
      "New Field": "Value"
    },...

现在我可以添加一个新字段,但在主对象中,我正在使用 Json.NET 库来完成这项工作,但文档似乎没有达到那个级别。

你们中有人做过吗?

【问题讨论】:

  • 在将新对象添加到集合后,您不能只是用JsonConvert.SerializeObject(); 再次序列化“主对象”吗?
  • 你到底想做什么? Json.NET 文档非常清楚如何add properties to JObjects...
  • 我收到一个带有 JSON 结构的字符串(第一个 sn-p),但我想要的是向它添加一个新字段和值,然后将其解析为 xml,但是部分我已经完成了

标签: c# arrays json json.net


【解决方案1】:

试试

JObject root = (JObject) JsonConvert.DeserializeObject(File.ReadAllText("products.json"));
JArray packages = (JArray) root["Packages"];

JObject newItem = new JObject();
newItem["Name"] = "Cups";
// ...

packages.Add(newItem);

Console.WriteLine(root); // Prints new json

【讨论】:

  • 感谢您的回答,但 LB 方法对我有用。干杯!
【解决方案2】:

JObject 实现 IDictionary。

var jObj = JObject.Parse(json);
foreach(var item in jObj["Packages"])
{
    item["New Field"] = "Value";
}
var newjson = jObj.ToString(Newtonsoft.Json.Formatting.Indented);

【讨论】:

  • 感谢您的回答 L.B.那行得通。之前没有使用过 JSON,我认为是时候开始练习了,现在我知道的更多了。
猜你喜欢
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多