Как продублировать json?
У меня есть json которые я получаю данные в них могут быть разные но всегда есть Id. Мне нужно добавить такой же обьект в json который я получил и изменить ид на 1
Пример:
{
"currentProfile": 1,
"profiles": [
{
"primary": {
"Id" : 0,
"color": {
"b": 255,
"g": 94,
"r": 152,
"a": 255
},
"bHasOutline": true,
"outlineThickness": 1,
"outlineOpacity": 1,
"centerDotSize": 1,
"centerDotOpacity": 1,
"bDisplayCenterDot": false,
"bFixMinErrorAcrossWeapons": false
}
}
]
}
Как должно быть
{
"currentProfile":1,
"profiles":[
{
"primary":{
"Id": 0,
"color":{
"b":255,
"g":94,
"r":152,
"a":255
},
"bHasOutline":true,
"outlineThickness":1,
"outlineOpacity":1,
"centerDotSize":1,
"centerDotOpacity":1,
"bDisplayCenterDot":false,
"bFixMinErrorAcrossWeapons":false
},
"primary":{
"Id": 1,
"color":{
"b":255,
"g":94,
"r":152,
"a":255
},
"bHasOutline":true,
"outlineThickness":1,
"outlineOpacity":1,
"centerDotSize":1,
"centerDotOpacity":1,
"bDisplayCenterDot":false,
"bFixMinErrorAcrossWeapons":false
}
}
]
}
Ответы (1 шт):
Автор решения: EvgeniyZ
→ Ссылка
Пожалуйста, указывайте в вопросе все необходимые данные заранее! Вытягивать из вас все необходимое мне лично не очень хочется.
Если у вас JSON изначально неизвестен, вы не знаете большинство из его значений, но знаете базовые, то решение будет тогда примерно таким:
// JSON строка
var jsonString = "{\"currentProfile\":1,\"profiles\":[{\"primary\":{\"Id\":0,\"color\":{\"b\":255,\"g\":94,\"r\":152,\"a\":255},\"bHasOutline\":true,\"outlineThickness\":1,\"outlineOpacity\":1,\"centerDotSize\":1,\"centerDotOpacity\":1,\"bDisplayCenterDot\":false,\"bFixMinErrorAcrossWeapons\":false}}]}";
// Создаем JsonNode на основе строки
var rootNode = JsonNode.Parse(jsonString);
// Получаем profiles и преобразуем в JsonArray
var profiles = rootNode["profiles"].AsArray();
// Берем из JsonArray первый объект и на его основе создаем новый (клон) JsonNode
var copyNode = JsonNode.Parse(profiles[0].ToJsonString());
// Задаем новое значение нужной нам переменной
copyNode["primary"]["Id"] = 1;
// Добавляем новый JsonNode в JsonArray
profiles.Add(copyNode);
// Преобразуем обратно в строку WriteIndented - чтоб на выходе был "красивый вид", а не одна строка.
var result = rootNode.ToJsonString(new() { WriteIndented = true });
Результатом будет
{
"currentProfile": 1,
"profiles": [
{
"primary": {
"Id": 0,
"color": {
"b": 255,
"g": 94,
"r": 152,
"a": 255
},
"bHasOutline": true,
"outlineThickness": 1,
"outlineOpacity": 1,
"centerDotSize": 1,
"centerDotOpacity": 1,
"bDisplayCenterDot": false,
"bFixMinErrorAcrossWeapons": false
}
},
{
"primary": {
"Id": 1,
"color": {
"b": 255,
"g": 94,
"r": 152,
"a": 255
},
"bHasOutline": true,
"outlineThickness": 1,
"outlineOpacity": 1,
"centerDotSize": 1,
"centerDotOpacity": 1,
"bDisplayCenterDot": false,
"bFixMinErrorAcrossWeapons": false
}
}
]
}
Но я на вашем месте всеж узнал бы все возможные (необходимые) свойства объекта и делал бы простую десериализацию. Скажем так, это надежней и более удобней.