c# - 使用 JObject 修改集合中的 JSON 字段
问题描述
我正在尝试更改value
JSON 数组集合中的 JSON 消息中的字段。不幸的是,JSON.net 文档显示了如何修改集合字段以外的所有内容。
使用以下 JSON 消息结构和提琴手代码,我需要修改value
params 数组中的第一个元素字段testParams
,但我无法使其工作。它在行上抛出“对象引用未设置为对象的实例”异常,cJson["value"] = "New value";
因为cJson
它是空的,所以我必须做一些不正确的事情来引用该字段位置。谁能帮我解决这个问题?
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
public class Program
{
public static void Main()
{
String json = @"{
'codeName': '',
'testParams': {
'params': [
{
'name': '',
'value': ''
},
{
'name': '',
'value': ''
}
]
}
}";
var item = JObject.Parse(json);
JObject cJson = (JObject)item["testParams.params[0]"];
cJson["value"] = "New value";
Console.WriteLine(item.ToString(Formatting.Indented));
}
}
更改“值”字段后,输出应如下所示。
{
'codeName': '',
'testParams': {
'testobj': [
{
'name': '',
'value': 'New value'
},
{
'name': '',
'value': ''
}
]
}
}
解决方案
问题是您将 JSON 路径表达式传递给JObject
. 这将不起作用,因为索引器希望参数字符串是实际的属性名称。由于 JSON 的根目录中没有字面称为 的属性testParams.params[0]
,因此索引器将返回 null。如果要使用路径表达式,则需要改用该SelectToken()
方法。
JObject cJson = (JObject)item.SelectToken("testParams.params[0]");
小提琴:https ://dotnetfiddle.net/XXx06N
作为参考,使用索引器语法的等效方法如下:
JObject cJson = (JObject)item["testParams"]["params"][0];
推荐阅读
- linux - If语句将变量与列表中的文件进行比较
- ios - iOS 13 模拟器中的“找不到 MIDI 网络驱动程序”崩溃
- python - 如何向用户显示类别
- html - dompdf laravel if 1 div page break 2nd 从新页面开始如何防止?
- angular - Ionic - 使用 ion-toggle 切换功能
- python - Django计算人口金字塔的百分比
- spring-boot - How to convert plain java main method program on docker
- xml - 如何重新分发 MSXML 库?
- java - 为什么我在更换 Arial Narrow 时会得到额外的符号?
- ansible - 使用 Ansible 按第二个列表的特定顺序映射 Debian 软件包列表