Как перебрать к JSON с цифрой в названии узла

Ресет

Client
Регистрация
14.08.2011
Сообщения
35
Благодарностей
1
Баллы
8

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 237
Благодарностей
573
Баллы
113
Самый верный способ - создать класс и десериализовать в него.

Легко создать классы тут: https://app.quicktype.io/

В общий код пихаем это:
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
using ZennoLab.CommandCenter.TouchEvents;
using ZennoLab.CommandCenter.FullEmulation;
using ZennoLab.InterfacesLibrary.Enums;
using Global.ZennoLab.Json;
using Global.ZennoLab.Json.Converters;
using System.Collections.Generic;
using System.Globalization;

namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();

        // Insert your code here
    }
    
    public class JsonClass
    {
        public partial class Temperatures
    {
        [JsonProperty("json")]
        public Json Json { get; set; }
    }

    public partial class Json
    {
        [JsonProperty("filters")]
        public Filters Filters { get; set; }
    }

    public partial class Filters
    {
        [JsonProperty("currentPage")]
        public long CurrentPage { get; set; }

        [JsonProperty("pageCount")]
        public long PageCount { get; set; }

        [JsonProperty("totalCount")]
        public long TotalCount { get; set; }

        [JsonProperty("priceRanges")]
        public List<object> PriceRanges { get; set; }

        [JsonProperty("filterGroups")]
        public FilterGroups FilterGroups { get; set; }

        [JsonProperty("activeFilters")]
        public List<object> ActiveFilters { get; set; }

        [JsonProperty("itemsReorderedByRex")]
        public object ItemsReorderedByRex { get; set; }
    }

    public partial class FilterGroups
    {
        [JsonProperty("2")]
        public The2 The2 { get; set; }

        [JsonProperty("3")]
        public The2 The3 { get; set; }

        [JsonProperty("sort")]
        public Sort Sort { get; set; }
    }

    public partial class Sort
    {
        [JsonProperty("tagType")]
        public string TagType { get; set; }

        [JsonProperty("tagTypeName")]
        public string TagTypeName { get; set; }

        [JsonProperty("inputType")]
        public string InputType { get; set; }

        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("type")]
        public long Type { get; set; }

        [JsonProperty("sections")]
        public List<SortSection> Sections { get; set; }
    }

    public partial class SortSection
    {
        [JsonProperty("filters")]
        public List<FluffyFilter> Filters { get; set; }
    }

    public partial class FluffyFilter
    {
        [JsonProperty("id")]
        public long Id { get; set; }

        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("itemCount")]
        public string ItemCount { get; set; }
    }

    public partial class The2
    {
        [JsonProperty("tagType")]
        public long TagType { get; set; }

        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("conjunction")]
        public bool Conjunction { get; set; }

        [JsonProperty("type")]
        public long Type { get; set; }

        [JsonProperty("sections")]
        public List<The2_Section> Sections { get; set; }
    }

    public partial class The2_Section
    {
        [JsonProperty("id")]
        public object Id { get; set; }

        [JsonProperty("label")]
        public object Label { get; set; }

        [JsonProperty("filters")]
        public List<PurpleFilter> Filters { get; set; }
    }

    public partial class PurpleFilter
    {
        [JsonProperty("id")]
        public string Id { get; set; }

        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("itemCount")]
        public long ItemCount { get; set; }

        [JsonProperty("tagId")]
        public long TagId { get; set; }

        [JsonProperty("colors", NullValueHandling = NullValueHandling.Ignore)]
        public List<long> Colors { get; set; }
    }
    }
}

В директивы дублируем это:
C#:
using Global.ZennoLab.Json;
using Global.ZennoLab.Json.Converters;
using System.Collections.Generic;
using System.Globalization;
В сниппет вставляем это:

C#:
var _j = JsonConvert.DeserializeObject<JsonClass.Temperatures>(project.Variables["json"].Value);
return _j.Json.Filters.FilterGroups.The2.Name;
 
  • Спасибо
Реакции: Ресет

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 237
Благодарностей
573
Баллы
113
Но Json кривой какой-то. Если там перечень фильтров, то должен возвращаться массив с этими фильтрами. А возвращается объект....
Будет больше значений - будет и больше классов.. Перебор не сделать.
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 237
Благодарностей
573
Баллы
113
А, ну и в переменную проекта "json" положи джсонку, забыл написать.
 

Ресет

Client
Регистрация
14.08.2011
Сообщения
35
Благодарностей
1
Баллы
8
Мне бы на C# это перебрать foreach, а то очень долго будет перебор делать кубиками
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 237
Благодарностей
573
Баллы
113

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Подскажите как можно сделать перебор JSON у которого узел называется как цифра
(строка 9)
C#:
string json = project.Variables["json"].Value;
project.Json.FromString(json);

Dictionary<string, string> items = project.Json.GetAllMembersList();

foreach(var item in items){
    project.SendInfoToLog(string.Join("|", new[]{item.Key, item.Value}));
}
98056
 

Ресет

Client
Регистрация
14.08.2011
Сообщения
35
Благодарностей
1
Баллы
8
@BAZAg благодарю, я видел вашу тему с таким же вопросом - но не смог разобраться как дальше работать, так как я в C# не силен.

Мне нужно для каждой filterGroups взять Name, и для каждого sections в этой группе собрать filters.name в один массив, чтоб получилось

filterGroups.Name = [name1, name, etc]

Я уже в принципе решил это на PHP, там с этим проблем нет, но не слишком удобно дергать внешний скрипт.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
filterGroups.Name = [name1, name, etc]
Ниже предоставил выборку именно в том виде, в котором Вы писали.

JSON:
{
    "json": {
        "filters": {
            "currentPage": 1,
            "pageCount": 0,
            "totalCount": 134908,
            "priceRanges": [],
            "filterGroups": {
                "2": {
                    "tagType": 18,
                    "name": "Slevy",
                    "conjunction": true,
                    "type": 0,
                    "sections": [{
                        "id": null,
                        "label": null,
                        "filters": [{
                            "id": "vyprodej",
                            "name": "Slevy",
                            "itemCount": 58855,
                            "tagId": 227
                        }, {
                            "id": "slevy-80",
                            "name": "Slevy 80 % a více",
                            "itemCount": 89,
                            "tagId": 250
                        }]
                    }]
                },
                "3": {
                    "tagType": 3,
                    "name": "Barva",
                    "conjunction": false,
                    "type": 1,
                    "sections": [{
                        "id": null,
                        "label": null,
                        "filters": [{
                            "id": "cerna",
                            "name": "Černá",
                            "itemCount": 16157,
                            "tagId": 230,
                            "colors": [4278190080, 4278190080]
                        }, {
                            "id": "bila",
                            "name": "Bílá",
                            "itemCount": 13054,
                            "tagId": 231,
                            "colors": [4294967295, 4294967295]
                        }, {
                            "id": "telova",
                            "name": "Tělová",
                            "itemCount": 18,
                            "tagId": 1453057,
                            "colors": [4294238421, 4294238421]
                        }, {
                            "id": "horcicova",
                            "name": "Hořčicová",
                            "itemCount": 50,
                            "tagId": 833,
                            "colors": [4294557718, 4294557718]
                        }]
                    }]
                },
                "sort": {
                    "tagType": "sort",
                    "tagTypeName": "sort",
                    "inputType": "radio",
                    "name": "Seřadit",
                    "type": 0,
                    "sections": [{
                        "filters": [{
                            "id": 1,
                            "name": "Oblíbené",
                            "itemCount": ""
                        }, {
                            "id": 2,
                            "name": "Nejlevnější",
                            "itemCount": ""
                        }, {
                            "id": 3,
                            "name": "Nejdražší",
                            "itemCount": ""
                        }, {
                            "id": 4,
                            "name": "Nejnovější",
                            "itemCount": ""
                        }]
                    }]
                }
            },
            "activeFilters": [],
            "itemsReorderedByRex": null
        },
    }
}
C#:
string json = project.Variables["json"].Value;
project.Json.FromString(json);

var root = project.Json.json.filters.filterGroups;
var list = root.GetMembersList(); // Берем все filterGroups (ожидаем 2, 3, sort)
var result = new List<string>();

foreach(string s in list) { // Взяли первый
    var name = root.GetMember(s).GetMember("name");
    var filtersnames = new List<string>();
    var sections = root.GetMember(s).GetMember("sections");
    foreach(var section in sections){
        var filters = section.GetMember("filters");
        foreach(var filter in filters){
            var filter_name = filter.GetMember("name");
            filtersnames.Add(filter_name);
        }
    }
    result.Add(string.Format("{0} = [{1}]", name, string.Join(",", filtersnames)));
}

return Environment.NewLine + string.Join(Environment.NewLine, result);
98208
 
  • Спасибо
Реакции: Ресет и Ilshakin

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