Поиск по JSON

baracuda

Client
Регистрация
19.06.2013
Сообщения
771
Благодарностей
264
Баллы
63
Вводные: Есть портянка JSON. 100 товаров с кучей характеристик.

{-Json.data.products[0].id-} = "id": 187243,
{-Json.data.products[1].id-} = "id": 123423318,
{-Json.data.products[2].id-} = "id": 1234238,
{-Json.data.products[3].id-} = "id": 1248,
...
{-Json.data.products[99].id-} = "id": 1985418,

Зная id товара, как узнать номер products[*] ? что бы сграбить часть характеристик подставив везде нужный [*]
P.S. может не так вижу решение....
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 654
Благодарностей
4 628
Баллы
113
c# + jsonpath
либо перебирать каждый элемент, проверять совпадение по айди, и собирать данные при успехе
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 147
Благодарностей
607
Баллы
113
Вводные: Есть портянка JSON. 100 товаров с кучей характеристик.

{-Json.data.products[0].id-} = "id": 187243,
{-Json.data.products[1].id-} = "id": 123423318,
{-Json.data.products[2].id-} = "id": 1234238,
{-Json.data.products[3].id-} = "id": 1248,
...
{-Json.data.products[99].id-} = "id": 1985418,

Зная id товара, как узнать номер products[*] ? что бы сграбить часть характеристик подставив везде нужный [*]
P.S. может не так вижу решение....
Набор характеристик статичный ? Или плавает?
 

baracuda

Client
Регистрация
19.06.2013
Сообщения
771
Благодарностей
264
Баллы
63
плавает у лыж одно, у трусов другое
 

K R

Client
Регистрация
14.01.2017
Сообщения
107
Благодарностей
102
Баллы
43
Можно сделать на C# с помощью Newtonsoft.Json

Прописываем юзинги и добавляем библиотеку в ссылки из GAC.
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

C#:
string json = @"
        {
            ""products"": [
                { ""id"": 12553, ""name"": ""Product 1"", ""price"": 100 },
                { ""id"": 8534266, ""name"": ""Product 2"", ""price"": 200, ""size"": ""M"", ""width"": 10, ""height"": 20 },
                { ""id"": 945735, ""name"": ""Product 3"", ""price"": 300, ""volume"": 500 }
            ]
        }";

JObject jsonObject = JObject.Parse(json);
JArray productsArray = (JArray) jsonObject["products"];
int targetId = 8534266; // Значение id, которое мы ищем
int index = productsArray.IndexOf(productsArray.FirstOrDefault(p => (int) p["id"] == targetId));
if (index != -1)
{
    JObject targetProduct = productsArray.FirstOrDefault(p => (int) p["id"] == targetId) as JObject;

    if (targetProduct != null)
    {
        List<string> propertyNames = targetProduct.Properties().Select(p => p.Name).ToList();
        foreach (var propertyName in propertyNames)
        {
            project.SendInfoToLog(propertyName);
        }
    }
}
else
{
    project.SendInfoToLog($"Product with id {targetId} not found");
}

Этот код получит номер products[*] в переменную int index и выведет в лог список всех свойств, которые есть у продукта с нужным id. Дальше уже под себя настроите в каком виде всё это будет собираться и храниться.
 
  • Спасибо
Реакции: volody00 и baracuda

doc

Client
Регистрация
30.03.2012
Сообщения
8 654
Благодарностей
4 628
Баллы
113
Можно сделать на C# с помощью Newtonsoft.Json

Прописываем юзинги и добавляем библиотеку в ссылки из GAC.
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

C#:
string json = @"
        {
            ""products"": [
                { ""id"": 12553, ""name"": ""Product 1"", ""price"": 100 },
                { ""id"": 8534266, ""name"": ""Product 2"", ""price"": 200, ""size"": ""M"", ""width"": 10, ""height"": 20 },
                { ""id"": 945735, ""name"": ""Product 3"", ""price"": 300, ""volume"": 500 }
            ]
        }";

JObject jsonObject = JObject.Parse(json);
JArray productsArray = (JArray) jsonObject["products"];
int targetId = 8534266; // Значение id, которое мы ищем
int index = productsArray.IndexOf(productsArray.FirstOrDefault(p => (int) p["id"] == targetId));
if (index != -1)
{
    JObject targetProduct = productsArray.FirstOrDefault(p => (int) p["id"] == targetId) as JObject;

    if (targetProduct != null)
    {
        List<string> propertyNames = targetProduct.Properties().Select(p => p.Name).ToList();
        foreach (var propertyName in propertyNames)
        {
            project.SendInfoToLog(propertyName);
        }
    }
}
else
{
    project.SendInfoToLog($"Product with id {targetId} not found");
}

Этот код получит номер products[*] в переменную int index и выведет в лог список всех свойств, которые есть у продукта с нужным id. Дальше уже под себя настроите в каком виде всё это будет собираться и храниться.
библиотека уже давно встроена в зенно
 
  • Спасибо
Реакции: baracuda

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