Как вставить переменную в JSON

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 124
Благодарностей
32
Баллы
48
Заранее переменную JSON не знаю, а могу сформировать их при помощи склеивание разных строк числа из таблицы+ переменные. Подскажите как правильно сделать
136162
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 394
Благодарностей
721
Баллы
113
Попробуй через odds["14566664"] (разными вариациями)
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 124
Благодарностей
32
Баллы
48

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 394
Благодарностей
721
Баллы
113
Точка там зачем? В нижней строке зачем точка и плюс? Конечно не работает, потому что синтиксис некорректный.
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 394
Благодарностей
721
Баллы
113
return project.Json.odds["14566664"].choices[1].fractionalValue.ToString();
Что вернет?
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 124
Благодарностей
32
Баллы
48

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 124
Благодарностей
32
Баллы
48
Подскажите как достать значение из JSON с таким корявым именем odds.14566873.choices[1].fractionalValue
 
Последнее редактирование:

Deisler

Client
Регистрация
26.10.2019
Сообщения
504
Благодарностей
195
Баллы
43

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 124
Благодарностей
32
Баллы
48
Скиньте такой json. Или его часть в виде примера

Вот сайт https://www.sofascore.com/ru/football/2025-09-19

Вот GET Запрос https://www.sofascore.com/api/v1/sport/football/odds/1/2025-09-19
136221

После Парсинга JSON
136222

И вот здесь основания сложность. Вот пример odds.13394661.choices[1].fractionalValue
136223

Если будут сложности пишите
 

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 496
Благодарностей
994
Баллы
113
На примере этого куска json:
Код:
{"odds":{"14566873":{"choices":[{"fractionalValue":"5/2"},{"fractionalValue":"3/1"}]}}}
C#:
string json = project.Variables["json"].Value;

var obj = JObject.Parse(json);

// Берем первый динамический ключ в odds
var dynamicKey = ((JProperty)obj["odds"].First).Name;

// Достаем fractionalValue второго элемента
string value = (string)obj["odds"][dynamicKey]["choices"][1]["fractionalValue"];

return value;
В директивы Using необходимо добавить:
Код:
using Global.ZennoLab.Json;
using Global.ZennoLab.Json.Linq;
 
  • Спасибо
Реакции: SlavenTyz

Deisler

Client
Регистрация
26.10.2019
Сообщения
504
Благодарностей
195
Баллы
43
1758389042395.png
Стандартными средствами не получается сделать... ) Нужно пользоваться сторонними библиотеками (как предложили выше)

Если вставить значение в кубик пауза, то он отрабатывает. И кубик паузы можно конвертировать в c#. Но вариант, который получаем после конвертации выдает ошибку )))
 

Deisler

Client
Регистрация
26.10.2019
Сообщения
504
Благодарностей
195
Баллы
43
Костыльное решение, но все же решение...
В полученном json в ключах после odds добавить текстовый символ. После чего с этим уже можно работать.

1758390453349.png

C#:
// Получаем JSON строку из переменной проекта
string jsonString = project.Variables["json"].Value;

// Просто заменяем все цифровые ключи в кавычках, которые идут после двоеточия
string pattern = @"""(\d+)""\s*:";
string replacement = @"""n$1"":";
string result = Regex.Replace(jsonString, pattern, replacement);

// Сохраняем измененный JSON
project.Variables["jsonNew"].Value = result;
project.Variables["test"].Value = project.Json.odds.n14065096.sourceId.ToString();
 

zarufakis

Client
Регистрация
22.03.2019
Сообщения
1 920
Благодарностей
1 312
Баллы
113
Может так поможет.

C#:
string jsonResponse = project.Variables["json_response"].Value;
var targetId = "14566873";
int choiceIndex = 1;

var root = Global.ZennoLab.Json.JsonConvert.DeserializeObject<dynamic>(jsonResponse);
string fractionalValue = root.odds[targetId].choices[choiceIndex].fractionalValue;
project.Variables["json_value"].Value = fractionalValue;
136247

136248
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 124
Благодарностей
32
Баллы
48
На будущее если кому ни будь будет интересно вот как я решил, помог решить
Zedx

136255
// Получаем данные
Tab Tab1 = instance.ActiveTab;
IZennoTable tblTest = project.Tables["БукмекерскиеКоэфиценты"];
int intRowsCount = tblTest.RowCount;
string JSON_Koeff = project.Variables["JSON_Koeff"].Value;

// Парсим JSON
var obj = JObject.Parse(JSON_Koeff);

for(int i = 0; i < intRowsCount; i++)
{
// Получаем ключ из таблицы и преобразуем в строку
string dynamicKey = tblTest.GetCell(0, i).ToString();

project.SendInfoToLog("dynamicKey=" + dynamicKey);

// Проверяем существование пути в JSON перед обращением
JToken oddsToken = obj["odds"];
if (oddsToken == null)
{
project.SendInfoToLog("Не найден объект 'odds' в JSON");
continue;
}

JToken dynamicKeyToken = oddsToken[dynamicKey];
if (dynamicKeyToken == null)
{
project.SendInfoToLog($"Ключ '{dynamicKey}' не найден в объекте 'odds'");
continue;
}

JToken choicesToken = dynamicKeyToken["choices"];
if (choicesToken == null || !choicesToken.HasValues)
{
project.SendInfoToLog($"Не найден массив 'choices' для ключа '{dynamicKey}'");
continue;
}

// Проверяем, существует ли второй элемент в массиве choices
if (choicesToken[0] == null)
{
project.SendInfoToLog($"Второй элемент не найден в массиве 'choices' для ключа '{dynamicKey}'");
continue;
}

JToken fractionalValueToken_P1 = choicesToken[0]["fractionalValue"];
if (fractionalValueToken_P1 == null)
{
project.SendInfoToLog($"Не найдено значение 'fractionalValueToken_P1' для ключа '{dynamicKey}'");
continue;
}

// Безопасно извлекаем значение
string strP1 = fractionalValueToken_P1.ToString();
double Cislitel=Convert.ToDouble(Regex.Match(strP1,@"(.*(?=/))").Value);
double Znamenatel=Convert.ToDouble(Regex.Match(strP1,@"((?<=/).*)").Value);
double P1=Cislitel/Znamenatel+1;
project.SendInfoToLog($"Значение для ключа {dynamicKey}: {strP1}");

JToken fractionalValueToken_X = choicesToken[1]["fractionalValue"];
string strX = fractionalValueToken_X.ToString();
Cislitel=Convert.ToDouble(Regex.Match(strX,@"(.*(?=/))").Value);
Znamenatel=Convert.ToDouble(Regex.Match(strX,@"((?<=/).*)").Value);
double X=Cislitel/Znamenatel+1;

JToken fractionalValueToken_P2 = choicesToken[2]["fractionalValue"];
string strP2 = fractionalValueToken_P2.ToString();
Cislitel=Convert.ToDouble(Regex.Match(strP2,@"(.*(?=/))").Value);
Znamenatel=Convert.ToDouble(Regex.Match(strP2,@"((?<=/).*)").Value);
double P2=Cislitel/Znamenatel+1;

tblTest.SetCell(1,i,Convert.ToString(P1));
tblTest.SetCell(2,i,Convert.ToString(X));
tblTest.SetCell(3,i,Convert.ToString(P2));
/
}
 
  • Спасибо
Реакции: izubr

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 124
Благодарностей
32
Баллы
48

Deisler

Client
Регистрация
26.10.2019
Сообщения
504
Благодарностей
195
Баллы
43
По вашему же скрину видно что marketName и есть fullTime 136319

А сами хотите увидеть fractionalValue 136320, а не marketName

Видимо вам нужно просто убрать фильтр 136321
 

profi88

Client
Регистрация
10.09.2018
Сообщения
314
Благодарностей
45
Баллы
28
Вставить переменную в JSON можно разными способами в зависимости от языка/среды. Основная идея — формировать объект/строку с нужным значением переменной.


Пример на C#:



var myValue = "Привет";
var obj = new { message = myValue };
var json = JsonSerializer.Serialize(obj); // {"message":"Привет"}


Пример на JavaScript:



let myValue = "Привет";
let json = JSON.stringify({ message: myValue }); // '{"message":"Привет"}'


Если нужно вставить в уже готовый JSON-шаблон как строку:



let template = '{"message":"%VALUE%"}';
let myValue = "Привет";
let json = template.replace("%VALUE%", myValue);


Важно: используйте JSON-сериализацию вместо конкатенации, чтобы корректно экранировать кавычки и спецсимволы.
 

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 496
Благодарностей
994
Баллы
113
Вообще для нормальной работы с JSON лучше сразу использовать десериализацию/сериализацию и не городить костыли типа regex'ов. Вот например онлайн конвертер:
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)