Мой файл содержит структуру JSON ниже.
{
"Name":"M",
"Age":"2",
"Bots":[{
"from":"D/2334/23",
"To":"02-04-2023"
},{
"from":"E/2s/1",
"To":"03-04-2023"
},{
"from":"ESS/5sB/DS",
"To":"03-04-2023"
}
]
}
Здесь я хотел бы изменить значение «Кому» в каждом объекте jarray, чтобы получить «от» в каждой строке.
Bots:[
{
"from":"D/2334/23",
"To":"2334/23"
},
{
"from":"E/2s/1",
"To":"2s/1"
},
{
"from:"ESS/5sB/DS",
"To":"5sB/DS"
}
]
Я сослался на это [https://stackoverflow.com/questions/21695185/change-values-in-json-file-writing-files], но я не могу обновить этот файл в тот же json, и ему не удалось прочитать "от значения" с помощью Split('/')[1]
string json = File.ReadAllText("settings.json");
dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
jsonObj["Bots"][0]["To"] = jsonObj["Bots"][0]["from"].split('/')[1];
[1]:
Кто-нибудь предлагает способ получить значение «от», используя split ('/') или любые другие функции?





Не нужно использовать dynamic, используйте API, предоставляемый библиотекой, для обработки динамического JSON (JObject, JToken, JArray, см. Документы LINQ to JSON для некоторых примеров):
var jsonObj = JsonConvert.DeserializeObject<JObject>(json); // or JObject.Parse
foreach (var jToken in jsonObj["Bots"])
{
jToken["To"] = jToken["from"].Value<string>().Split('/')[1]; // TODO - validate that token is of correct type and have enough elements after split
}
Console.WriteLine(JsonConvert.SerializeObject(jsonObj));
// Prints:
// {"Name":"M","Age":"2","Bots":[{"from":"D/2334/23","To":"2334"},{"from":"E/2s/1","To":"2s"},{"from":"ESS/5sB/DS","To":"5sB"}]}
попробуйте подстроку вместо разделения
var jObj = JObject.Parse(json);
foreach (var item in jObj["Bots"])
item["To"] = ((string)item["from"])
.Substring(((string)item["from"]).IndexOf("/") + 1);
json = jObj.ToString(); // or "{ \"Bots\": " + jObj["Bots"].ToString() + " }";
Console.WriteLine(json);
//or
File.WriteAllText("settings.json", json);