0 / 0 / 0
Регистрация: 09.04.2016
Сообщений: 37

Пасриснг json много уровненных массивов

04.03.2019, 16:36. Показов 3234. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Подскажите как получить вложенные данные с joson'a. Вот часть кода.
Сам json
JSON
1
{"success":true,"results":[{"classid":"788917046","instanceid":"3108191329","sell_offers":null,"buy_offers":null,"history":null,"info":{"our_market_instanceid":null,"market_name":"Autographed Manifold Paradox","name":"Autographed Manifold Paradox","market_hash_name":"Autographed Manifold Paradox","rarity":"Arcana","quality":"Autographed","type":"Phantom Assassin","mtype":"phantom_assassin","slot":"Оружие","image":"https://cdn.dota2.net//item/Autographed+Manifold+Paradox/150.png","description":[{"type":"html","value":"Используется: Phantom Assassin"},{"type":"html","value":" "},{"type":"html","value":"Стили:","color":"9da1a9"},{"type":"html","value":"Style 1","color":"9da1a9"},{"type":"html","value":"Style 2","color":"6c7075"},{"type":"html","value":"Style 3","color":"6c7075"},{"type":"html","value":"Улучшайте оружие, зарабатывая очки. Каждая победа за Phantom Assassin приносит вам 1 очко. Заработав 40 очков, вы улучшите оружие до 2 уровня, а если вы заработаете 100 очков, оружие примет финальную форму.\r\nИздав хриплый смешок, старший кузнец Крейлер взмахнул мечом, ковавшимся 11 поколениями его семьи. Он был настолько острым, что окружающий мир, с треском разорвавшейся материи, разошелся. Через этот разрыв Крейлер увидел себя несколькими мгновениями ранее, державшего тот же самый вожделенный меч. Вдруг, в приступе алчности и сумасшествия, он сразил своего двойника, чтобы заполучить второй меч. Но с запозданием Крейлер почувствовал знакомую рану, и внезапно воспоминания о ней нахлынули на него..."},{"type":"html","value":" "},{"type":"html","value":"(Нельзя удалить)"},{"type":"html","value":"Счёт охотника: 123 Rune of the Foreseer's ContractInternational 2015 - Автограф Ievgen 'n0point' Dubravin 1-го уровня Автографическая руна TI 2015"}],"tags":[{"category":"Quality","internal_name":"autographed","localized_category_name":"Качество","localized_tag_name":"Autographed","color":"ADE55C","category_name":"Качество","name":"Autographed"},{"category":"Rarity","internal_name":"Rarity_Arcana","localized_category_name":"Редкость","localized_tag_name":"Arcana","color":"ADE55C","category_name":"Редкость","name":"Arcana"},{"category":"Type","internal_name":"wearable","localized_category_name":"Тип","localized_tag_name":"Украшение","category_name":"Тип","name":"Украшение"},{"category":"Slot","internal_name":"weapon","localized_category_name":"Ячейка","localized_tag_name":"Оружие","category_name":"Ячейка","name":"Оружие"},{"category":"Hero","internal_name":"npc_dota_hero_phantom_assassin","localized_category_name":"Герой","localized_tag_name":"Phantom Assassin","category_name":"Герой","name":"Phantom Assassin"}],"hash":"fd93ebf809c985d4f328e9611adc60e5"}}]}
Конкретно интересуют вот эти элементы
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"type":"html",
"value":"Style 1",
"color":"9da1a9"
},
{
"type":"html",
"value":"Style 2",
"color":"6c7075"
},
{
"type":"html",
"value":"Style 3",
"color":"6c7075"
Вот как я пробую это сделать.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using System;
using System.Net;
using System.Collections.Specialized;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApplication
{
    class Program
    {
        public  static void Main(string[] args)
        {
            string info = "key";
            string url = "https://market.dota2.net/api/MassInfo/2/0/0/3?key=" + info + "";
            using (var webClient = new WebClient())
            {
                var pars = new NameValueCollection();
                pars.Add("list", "644964380_2968685521,644964380_949315912");
 
                var response = webClient.UploadValues(url, pars);
                string str = System.Text.Encoding.UTF8.GetString(response);
                //Console.WriteLine(str);
                //Console.ReadKey();
 
                GetResult(str);
            }
 
        }
 
        public static void GetResult(string str)
        {
            string json = str;
            var jsonApi = JsonConvert.DeserializeObject<List<RootObject>>("[" + json + "]");
            foreach (var item  in jsonApi)
            {
                
 
                var Res = item.results.First();
                var info = item.results.First().info.description.First().value;
 
                Console.WriteLine($"{Res.classid}-{Res.instanceid}-{info}");
                Console.ReadKey();
 
 
            }
            
        }
 
        public class Description
        {
            public string type { get; set; }
            public string value { get; set; }
            public string color { get; set; }
        }
 
        public class Tag
        {
            public string category { get; set; }
            public string internal_name { get; set; }
            public string localized_category_name { get; set; }
            public string localized_tag_name { get; set; }
            public string color { get; set; }
            public string category_name { get; set; }
            public string name { get; set; }
        }
 
        public class Info
        {
            public object our_market_instanceid { get; set; }
            public string market_name { get; set; }
            public string name { get; set; }
            public string market_hash_name { get; set; }
            public string rarity { get; set; }
            public string quality { get; set; }
            public string type { get; set; }
            public string mtype { get; set; }
            public string slot { get; set; }
            public string image { get; set; }
            public List<Description> description { get; set; }
            public List<Tag> tags { get; set; }
            public string hash { get; set; }
        }
 
        public class Result
        {
            public string classid { get; set; }
            public string instanceid { get; set; }
            public object sell_offers { get; set; }
            public object buy_offers { get; set; }
            public object history { get; set; }
            public Info info { get; set; }
        }
 
        public class RootObject
        {
            public bool success { get; set; }
            public List<Result> results { get; set; }
        }
    }
}
В ответе может быть до 100 записей. Как из каждой вытянуть нужную информацию.
Подскажите пожалуйста.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.03.2019, 16:36
Ответы с готовыми решениями:

Как создать много массивов?
Как можно создать много(50-100) двумерных массивов? Не вручную же их прописывать...

Десериализация массива массивов из json
Добрый день. Встала проблема с Десериализацией http ответа который возвращает OSRM сервис. JSON Имеет примерно следующий вид: { ...

Как работать с json если много ответов?
Например выдало ( json который ниже ), мне нужно узнать у них обоих именна не каждую разгадывать отдельно, а за раз, например выведет 1000...

21
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
04.03.2019, 16:42
KOD_BILL, какие данные нужны ?
P.S. Увидел
0
0 / 0 / 0
Регистрация: 09.04.2016
Сообщений: 37
04.03.2019, 16:47  [ТС]
Именно из блока description
данные из поля value
ТО есть "value":"Style 1", "value":"Style 2", "value":"Style 3"
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
04.03.2019, 17:01
Лучший ответ Сообщение было отмечено KOD_BILL как решение

Решение

KOD_BILL,
C#
1
2
3
4
5
6
7
//using Newtonsoft.Json.Linq;
var json = JObject.Parse(jfile)["results"][0]["info"]["description"];
json.Where(x => x["value"].ToString().Contains("Style")).Select(x => x["color"]).ToList().ForEach(x => Console.WriteLine(x));
//Результат
9da1a9
6c7075
6c7075
1
0 / 0 / 0
Регистрация: 09.04.2016
Сообщений: 37
04.03.2019, 17:11  [ТС]
Цитата Сообщение от PoPsa85 Посмотреть сообщение
KOD_BILL,
C#
1
2
3
4
5
6
7
//using Newtonsoft.Json.Linq;
var json = JObject.Parse(jfile)["results"][0]["info"]["description"];
json.Where(x => x["value"].ToString().Contains("Style")).Select(x => x["color"]).ToList().ForEach(x => Console.WriteLine(x));
//Результат
9da1a9
6c7075
6c7075
0_о а почему такой ответ?)
C#
1
2
3
9da1a9
6c7075
6c7075
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
04.03.2019, 17:13
KOD_BILL,
Потому что это значение color
Цитата Сообщение от PoPsa85 Посмотреть сообщение
Select(x => x["color"]
0
0 / 0 / 0
Регистрация: 09.04.2016
Сообщений: 37
04.03.2019, 17:14  [ТС]
Аааа. Я понял.
Спасибо Большое.
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
04.03.2019, 17:15
KOD_BILL, Если убрать:
C#
1
json.Where(x => x["value"].ToString().Contains("Style")).Select(x => x).ToList().ForEach(x => Console.WriteLine(x));
То результат
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
  "type": "html",
  "value": "Style 1",
  "color": "9da1a9"
}
{
  "type": "html",
  "value": "Style 2",
  "color": "6c7075"
}
{
  "type": "html",
  "value": "Style 3",
  "color": "6c7075"
}
0
0 / 0 / 0
Регистрация: 09.04.2016
Сообщений: 37
04.03.2019, 17:33  [ТС]
Цитата Сообщение от PoPsa85 Посмотреть сообщение
KOD_BILL, Если убрать:
C#
1
json.Where(x => x["value"].ToString().Contains("Style")).Select(x => x).ToList().ForEach(x => Console.WriteLine(x));
То результат
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
  "type": "html",
  "value": "Style 1",
  "color": "9da1a9"
}
{
  "type": "html",
  "value": "Style 2",
  "color": "6c7075"
}
{
  "type": "html",
  "value": "Style 3",
  "color": "6c7075"
}
Хотя я ожидал не много другого.
Если не сложно не подскажите. Ранее я на php выдергивал нужный элемент указав его
PHP
1
2
3
                          $style3=$item['info']['description'][5]['value'];
                          $style2=$item['info']['description'][4]['value'];
                          $style1=$item['info']['description'][3]['value'];
Я передавал данные в переменные и уже работал с ними дальше.

Сейчас же я думал перенести скрипт на с#
Но я не ожидал что столкнусь с такими проблемами при парсенге json(

А я еще вот интересны момент. Я чекаю для примера пару предметов.
C#
1
pars.Add("list", "644964380_2968685521,644964380_949315912");
Если выводим данные то результат только от первого "644964380_2968685521".

То есть я передаю через POST до 100 предметов.
И мне не понятно как их все обработать((
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
04.03.2019, 17:37
KOD_BILL, А что должно быть у вас в переменных style1, style2, style3 ?
Цитата Сообщение от KOD_BILL Посмотреть сообщение
И мне не понятно как их все обработать
Создавайте новую тему с вопросом. Правила форума.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
04.03.2019, 17:46
По моему решение из первого поста самое нормальное.
0
0 / 0 / 0
Регистрация: 09.04.2016
Сообщений: 37
04.03.2019, 17:51  [ТС]
Цитата Сообщение от PoPsa85 Посмотреть сообщение
KOD_BILL
Создавайте новую тему с вопросом. Правила форума.
Новую тему?
Так по моему я спрошу одно и тоже(

Цитата Сообщение от PoPsa85 Посмотреть сообщение
KOD_BILL, А что должно быть у вас в переменных style1, style2, style3 ?
Пример
Я смотрел содержимое строки "style3" у предмета 644964380_2968685521
Обычно она содержит " Style 3 (закрыто)" или "Style 3". И если она содержит "Style 3" то я вызывал следующий метод из api например создать "ордер".

Добавлено через 2 минуты
Цитата Сообщение от Someone007 Посмотреть сообщение
По моему решение из первого поста самое нормальное.
Которое я написал?
Оно работает но я не пойму как получить следующие элементы(
А в ответ может предти до 100 таких элементов в одном сообщении) и как их все перебрать мне не понятно.
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
04.03.2019, 18:12
KOD_BILL, Вот так по аналогии с php.
C#
1
2
3
var syle1 = JObject.Parse(jfile)["results"][0]["info"]["description"][3]["value"].ToString();
var syle2 = JObject.Parse(jfile)["results"][0]["info"]["description"][4]["value"].ToString();
var syle3 = JObject.Parse(jfile)["results"][0]["info"]["description"][5]["value"].ToString();
Хотя правильнее было их перебрать в цикле.

Цитата Сообщение от KOD_BILL Посмотреть сообщение
как получить следующие элементы
По вашему решению вы получите объект, в котором потом так же нужно отковырять нужные значения.
Почему Someone007, считает это более удобным, не знаю. Буду благодарен за разъяснения.

Добавлено через 16 минут
KOD_BILL, Что бы в вашем коде получить значения. Вместо цикла foreach вставте:
C#
1
2
3
            var style1 = jsonApi[0].results.First().info.description[3].value;
            var style2 = jsonApi[0].results.First().info.description[4].value;
            var style3 = jsonApi[0].results.First().info.description[5].value;
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
04.03.2019, 18:14
Цитата Сообщение от KOD_BILL Посмотреть сообщение
Но я не ожидал что столкнусь с такими проблемами при парсенге json
Не понятно в чем конкретно проблемы...

Код из первого поста рабочий, ну почти...
Миниатюры
Пасриснг json много уровненных массивов  
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
04.03.2019, 18:19
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
using System;
using System.Net;
using System.Collections.Specialized;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApplication
{
    class Program
    {
        public  static void Main(string[] args)
        {
            string info = "key";
            string url = "https://market.dota2.net/api/MassInfo/2/0/0/3?key=" + info + "";
            using (var webClient = new WebClient())
            {
                var pars = new NameValueCollection();
                pars.Add("list", "644964380_2968685521,644964380_949315912");
 
                var response = webClient.UploadValues(url, pars);
                string str = System.Text.Encoding.UTF8.GetString(response);
                //Console.WriteLine(str);
                //Console.ReadKey();
                GetResult(str);
            }
        }
 
        public static void GetResult(string json)
        {
            var jsonApi = JsonConvert.DeserializeObject<RootObject>(json);
            if (jsonApi.success)
            {
                var results = jsonApi.results;
                foreach (var item in results)
                {
                    var desc = item.info.description;
                    foreach (var d in desc)
                        Console.WriteLine($"{d.type}-{d.value}-{d.color}");
                }
            }
            else
            {
                Console.WriteLine("api error!");
            }
            Console.ReadKey();
        }
 
        public class Description
        {
            public string type { get; set; }
            public string value { get; set; }
            public string color { get; set; }
        }
 
        public class Tag
        {
            public string category { get; set; }
            public string internal_name { get; set; }
            public string localized_category_name { get; set; }
            public string localized_tag_name { get; set; }
            public string color { get; set; }
            public string category_name { get; set; }
            public string name { get; set; }
        }
 
        public class Info
        {
            public object our_market_instanceid { get; set; }
            public string market_name { get; set; }
            public string name { get; set; }
            public string market_hash_name { get; set; }
            public string rarity { get; set; }
            public string quality { get; set; }
            public string type { get; set; }
            public string mtype { get; set; }
            public string slot { get; set; }
            public string image { get; set; }
            public List<Description> description { get; set; }
            public List<Tag> tags { get; set; }
            public string hash { get; set; }
        }
 
        public class Result
        {
            public string classid { get; set; }
            public string instanceid { get; set; }
            public object sell_offers { get; set; }
            public object buy_offers { get; set; }
            public object history { get; set; }
            public Info info { get; set; }
        }
 
        public class RootObject
        {
            public bool success { get; set; }
            public List<Result> results { get; set; }
        }
    }
}
0
0 / 0 / 0
Регистрация: 09.04.2016
Сообщений: 37
04.03.2019, 18:20  [ТС]
Цитата Сообщение от PoPsa85 Посмотреть сообщение
KOD_BILL, Вот так по аналогии с php.
C#
1
2
3
var syle1 = JObject.Parse(jfile)["results"][0]["info"]["description"][3]["value"].ToString();
var syle2 = JObject.Parse(jfile)["results"][0]["info"]["description"][4]["value"].ToString();
var syle3 = JObject.Parse(jfile)["results"][0]["info"]["description"][5]["value"].ToString();
Хотя правильнее было их перебрать в цикле.


По вашему решению вы получите объект, в котором потом так же нужно отковырять нужные значения.
Почему Someone007, считает это более удобным, не знаю. Буду благодарен за разъяснения.

Добавлено через 16 минут
KOD_BILL, Что бы в вашем коде получить значения. Вместо цикла foreach вставте:
C#
1
2
3
            var style1 = jsonApi[0].results.First().info.description[3].value;
            var style2 = jsonApi[0].results.First().info.description[4].value;
            var style3 = jsonApi[0].results.First().info.description[5].value;

Так он берет только первый "ID"(644964380_2968685521)
644964380-2968685521-Style 1-Style 2-Style 3 (закрыто)

Добавлено через 1 минуту
Цитата Сообщение от Someone007 Посмотреть сообщение
Не понятно в чем конкретно проблемы...

Код из первого поста рабочий, ну почти...

Проблема в том что я не пойму как проверить все элементы. А не только первый(
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
04.03.2019, 18:23
Цитата Сообщение от KOD_BILL Посмотреть сообщение
Проблема в том что я не пойму как проверить все элементы. А не только первый(
Код выше проверяет все... Если конечно они есть...
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
04.03.2019, 18:34
Цитата Сообщение от KOD_BILL Посмотреть сообщение
как проверить все элементы
Вот так, наверное:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        public static void GetResult(string str)
        {
            string json = str;
            var jsonApi = JsonConvert.DeserializeObject<List<RootObject>>("[" + json + "]");
 
            
            foreach (var item in jsonApi)
            {
                var Res = item.results.First().info.description;
                foreach (var style in Res)
                {
                    Console.WriteLine(style.value);
                }
                
            }
        }
Или покажите json где больше записей.
0
0 / 0 / 0
Регистрация: 09.04.2016
Сообщений: 37
04.03.2019, 18:45  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Код выше проверяет все... Если конечно они есть...
Да я проверил. Похоже на мой но только сделано красивее)

Вот в этом и я и втыкаюсь.
Что Мы получаем все элементы. А не определены например только style3.

Добавлено через 5 минут
Цитата Сообщение от PoPsa85 Посмотреть сообщение
Вот так, наверное:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        public static void GetResult(string str)
        {
            string json = str;
            var jsonApi = JsonConvert.DeserializeObject<List<RootObject>>("[" + json + "]");
 
            
            foreach (var item in jsonApi)
            {
                var Res = item.results.First().info.description;
                foreach (var style in Res)
                {
                    Console.WriteLine(style.value);
                }
                
            }
        }
Или покажите json где больше записей.
Вот например
Запросил данные по "644964380_2968685521,644964380_94931591 2,644964380_1340700956,644964380-2254805347"
JSON
1
{"success":true,"results":[{"classid":"644964380","instanceid":"2968685521","sell_offers":{"best_offer":181974},"buy_offers":null,"history":null,"info":{"our_market_instanceid":null,"market_name":"Manifold Paradox","name":"Manifold Paradox","market_hash_name":"Manifold Paradox","rarity":"Arcana","quality":"Standard","type":"Phantom Assassin","mtype":"phantom_assassin","slot":"Оружие","image":"https://cdn.dota2.net//item/Manifold+Paradox/150.png","description":[{"type":"html","value":"Используется: Phantom Assassin"},{"type":"html","value":" "},{"type":"html","value":"Стили:","color":"9da1a9"},{"type":"html","value":"Style 1","color":"9da1a9"},{"type":"html","value":"Style 2","color":"6c7075"},{"type":"html","value":"Style 3 (закрыто)","color":"ff4040"},{"type":"html","value":"Улучшайте оружие, зарабатывая очки. Каждая победа за Phantom Assassin приносит вам 1 очко. Заработав 40 очков, вы улучшите оружие до 2 уровня, а если вы заработаете 100 очков, оружие примет финальную форму.<br><br>\r\nИздав хриплый смешок, старший кузнец Крейлер взмахнул мечом, ковавшимся 11 поколениями его семьи. Он был настолько острым, что окружающий мир, с треском разорвавшейся материи, разошелся. Через этот разрыв Крейлер увидел себя несколькими мгновениями ранее, державшего тот же самый вожделенный меч. Вдруг, в приступе алчности и сумасшествия, он сразил своего двойника, чтобы заполучить второй меч. Но с запозданием Крейлер почувствовал знакомую рану, и внезапно воспоминания о ней нахлынули на него..."},{"type":"html","value":" "},{"type":"html","value":"(Нельзя удалить)"},{"type":"html","value":"<div style=\"white-space: nowrap; margin: 10px\"><div style=\"white-space: nowrap; padding: 3px;\"><div style=\"width: 60px; height: 32px; vertical-align: top; display: inline-block;\"><div style=\"position: relative; width: 48px; height: 32px; vertical-align: top; display: inline-block; border: 2px solid rgb(255, 255, 255);\"><div style=\"position: absolute; width: 48px; height: 32px; vertical-align: top; display: inline-block; background-size: contain; background-image: url(https://steamcdn-a.akamaihd.net/apps/570/icons/econ/sockets/gem_legion_commander_duel_arcana.fa3e53183086c2dab41b9263881c9bb86449247e.png)\"></div></div></div><div style=\"vertical-align: top; display: inline-block; margin-left: 12px padding: 2px\"><span style=\"font-size: 18px; white-space: normal; color: rgb(255, 255, 255)\">Счёт охотника: 65</span><br><span style=\"font-size: 12px\">Rune of the Foreseer's Contract</span></div></div></div>"}],"tags":[{"category":"Quality","internal_name":"unique","localized_category_name":"Качество","localized_tag_name":"Standard","color":"D2D2D2","category_name":"Качество","name":"Standard"},{"category":"Rarity","internal_name":"Rarity_Arcana","localized_category_name":"Редкость","localized_tag_name":"Arcana","color":"ADE55C","category_name":"Редкость","name":"Arcana"},{"category":"Type","internal_name":"wearable","localized_category_name":"Тип","localized_tag_name":"Украшение","category_name":"Тип","name":"Украшение"},{"category":"Slot","internal_name":"weapon","localized_category_name":"Ячейка","localized_tag_name":"Оружие","category_name":"Ячейка","name":"Оружие"},{"category":"Hero","internal_name":"npc_dota_hero_phantom_assassin","localized_category_name":"Герой","localized_tag_name":"Phantom Assassin","category_name":"Герой","name":"Phantom Assassin"}],"hash":"929dbee1e7556bee1c8ef46944044e27"}},{"classid":"644964380","instanceid":"949315912","sell_offers":{"best_offer":220000},"buy_offers":null,"history":null,"info":{"our_market_instanceid":null,"market_name":"Manifold Paradox","name":"Manifold Paradox","market_hash_name":"Manifold Paradox","rarity":"Arcana","quality":"Standard","type":"Phantom Assassin","mtype":"phantom_assassin","slot":"Оружие","image":"https://cdn.dota2.net//item/Manifold+Paradox/150.png","description":[{"type":"html","value":"Используется: Phantom Assassin"},{"type":"html","value":" "},{"type":"html","value":"Стили:","color":"9da1a9"},{"type":"html","value":"Style 1","color":"9da1a9"},{"type":"html","value":"Style 2","color":"6c7075"},{"type":"html","value":"Style 3","color":"6c7075"},{"type":"html","value":"Улучшайте оружие, зарабатывая очки. Каждая победа за Phantom Assassin приносит вам 1 очко. Заработав 40 очков, вы улучшите оружие до 2 уровня, а если вы заработаете 100 очков, оружие примет финальную форму.<br><br>\r\nИздав хриплый смешок, старший кузнец Крейлер взмахнул мечом, ковавшимся 11 поколениями его семьи. Он был настолько острым, что окружающий мир, с треском разорвавшейся материи, разошелся. Через этот разрыв Крейлер увидел себя несколькими мгновениями ранее, державшего тот же самый вожделенный меч. Вдруг, в приступе алчности и сумасшествия, он сразил своего двойника, чтобы заполучить второй меч. Но с запозданием Крейлер почувствовал знакомую рану, и внезапно воспоминания о ней нахлынули на него..."},{"type":"html","value":" "},{"type":"html","value":"(Нельзя удалить)"},{"type":"html","value":"<div style=\"white-space: nowrap; margin: 10px\"><div style=\"white-space: nowrap; padding: 3px;\"><div style=\"width: 60px; height: 32px; vertical-align: top; display: inline-block;\"><div style=\"position: relative; width: 48px; height: 32px; vertical-align: top; display: inline-block; border: 2px solid rgb(255, 255, 255);\"><div style=\"position: absolute; width: 48px; height: 32px; vertical-align: top; display: inline-block; background-size: contain; background-image: url(https://steamcdn-a.akamaihd.net/apps/570/icons/econ/sockets/gem_legion_commander_duel_arcana.fa3e53183086c2dab41b9263881c9bb86449247e.png)\"></div></div></div><div style=\"vertical-align: top; display: inline-block; margin-left: 12px padding: 2px\"><span style=\"font-size: 18px; white-space: normal; color: rgb(255, 255, 255)\">Счёт охотника: 126</span><br><span style=\"font-size: 12px\">Rune of the Foreseer's Contract</span></div></div><div style=\"white-space: nowrap; padding: 3px;\"><div style=\"width: 60px; height: 32px; vertical-align: top; display: inline-block;\"><div style=\"position: relative; width: 48px; height: 32px; vertical-align: top; display: inline-block; border: 2px solid rgb(255, 255, 255);\"><div style=\"position: absolute; width: 48px; height: 32px; vertical-align: top; display: inline-block; background-size: contain; background-image: url()\"></div></div></div><div style=\"vertical-align: top; display: inline-block; margin-left: 12px padding: 2px\"><span style=\"font-size: 18px; white-space: normal; color: rgb(255, 255, 255)\">Пустое гнездо</span><br><span style=\"font-size: 12px\">Общий</span></div></div><div style=\"white-space: nowrap; padding: 3px;\"><div style=\"width: 60px; height: 32px; vertical-align: top; display: inline-block;\"><div style=\"position: relative; width: 48px; height: 32px; vertical-align: top; display: inline-block; border: 2px solid rgb(255, 255, 255);\"><div style=\"position: absolute; width: 48px; height: 32px; vertical-align: top; display: inline-block; background-size: contain; background-image: url()\"></div></div></div><div style=\"vertical-align: top; display: inline-block; margin-left: 12px padding: 2px\"><span style=\"font-size: 18px; white-space: normal; color: rgb(255, 255, 255)\">Пустое гнездо</span><br><span style=\"font-size: 12px\">Общий</span></div></div><div style=\"white-space: nowrap; padding: 3px;\"><div style=\"width: 60px; height: 32px; vertical-align: top; display: inline-block;\"><div style=\"position: relative; width: 48px; height: 32px; vertical-align: top; display: inline-block; border: 2px solid rgb(255, 255, 255);\"><div style=\"position: absolute; width: 48px; height: 32px; vertical-align: top; display: inline-block; background-size: contain; background-image: url()\"></div></div></div><div style=\"vertical-align: top; display: inline-block; margin-left: 12px padding: 2px\"><span style=\"font-size: 18px; white-space: normal; color: rgb(255, 255, 255)\">Пустое гнездо</span><br><span style=\"font-size: 12px\">Общий</span></div></div><div style=\"white-space: nowrap; padding: 3px;\"><div style=\"width: 60px; height: 32px; vertical-align: top; display: inline-block;\"><div style=\"position: relative; width: 48px; height: 32px; vertical-align: top; display: inline-block; border: 2px solid rgb(255, 255, 255);\"><div style=\"position: absolute; width: 48px; height: 32px; vertical-align: top; display: inline-block; background-size: contain; background-image: url()\"></div></div></div><div style=\"vertical-align: top; display: inline-block; margin-left: 12px padding: 2px\"><span style=\"font-size: 18px; white-space: normal; color: rgb(255, 255, 255)\">Пустое гнездо</span><br><span style=\"font-size: 12px\">Общий</span></div></div></div>"}],"tags":[{"category":"Quality","internal_name":"unique","localized_category_name":"Качество","localized_tag_name":"Standard","color":"D2D2D2","category_name":"Качество","name":"Standard"},{"category":"Rarity","internal_name":"Rarity_Arcana","localized_category_name":"Редкость","localized_tag_name":"Arcana","color":"ADE55C","category_name":"Редкость","name":"Arcana"},{"category":"Type","internal_name":"wearable","localized_category_name":"Тип","localized_tag_name":"Украшение","category_name":"Тип","name":"Украшение"},{"category":"Slot","internal_name":"weapon","localized_category_name":"Ячейка","localized_tag_name":"Оружие","category_name":"Ячейка","name":"Оружие"},{"category":"Hero","internal_name":"npc_dota_hero_phantom_assassin","localized_category_name":"Герой","localized_tag_name":"Phantom Assassin","category_name":"Герой","name":"Phantom Assassin"}],"hash":"d3d0df672aab99b33590cea65dd0f843"}},{"classid":"644964380","instanceid":"1340700956","sell_offers":{"best_offer":181916},"buy_offers":null,"history":null,"info":{"our_market_instanceid":null,"market_name":"Manifold Paradox","name":"Manifold Paradox","market_hash_name":"Manifold Paradox","rarity":"Arcana","quality":"Standard","type":"Phantom Assassin","mtype":"phantom_assassin","slot":"Оружие","image":"https://cdn.dota2.net//item/Manifold+Paradox/150.png","description":[{"type":"html","value":"Используется: Phantom Assassin"},{"type":"html","value":" "},{"type":"html","value":"Стили:","color":"9da1a9"},{"type":"html","value":"Style 1","color":"9da1a9"},{"type":"html","value":"Style 2","color":"6c7075"},{"type":"html","value":"Style 3 (закрыто)","color":"ff4040"},{"type":"html","value":"Улучшайте оружие, зарабатывая очки. Каждая победа за Phantom Assassin приносит вам 1 очко. Заработав 40 очков, вы улучшите оружие до 2 уровня, а если вы заработаете 100 очков, оружие примет финальную форму.<br><br>\r\nИздав хриплый смешок, старший кузнец Крейлер взмахнул мечом, ковавшимся 11 поколениями его семьи. Он был настолько острым, что окружающий мир, с треском разорвавшейся материи, разошелся. Через этот разрыв Крейлер увидел себя несколькими мгновениями ранее, державшего тот же самый вожделенный меч. Вдруг, в приступе алчности и сумасшествия, он сразил своего двойника, чтобы заполучить второй меч. Но с запозданием Крейлер почувствовал знакомую рану, и внезапно воспоминания о ней нахлынули на него..."},{"type":"html","value":" "},{"type":"html","value":"(Нельзя удалить)"},{"type":"html","value":"<div style=\"white-space: nowrap; margin: 10px\"><div style=\"white-space: nowrap; padding: 3px;\"><div style=\"width: 60px; height: 32px; vertical-align: top; display: inline-block;\"><div style=\"position: relative; width: 48px; height: 32px; vertical-align: top; display: inline-block; border: 2px solid rgb(255, 255, 255);\"><div style=\"position: absolute; width: 48px; height: 32px; vertical-align: top; display: inline-block; background-size: contain; background-image: url(https://steamcdn-a.akamaihd.net/apps/570/icons/econ/sockets/gem_legion_commander_duel_arcana.fa3e53183086c2dab41b9263881c9bb86449247e.png)\"></div></div></div><div style=\"vertical-align: top; display: inline-block; margin-left: 12px padding: 2px\"><span style=\"font-size: 18px; white-space: normal; color: rgb(255, 255, 255)\">Счёт охотника: 45</span><br><span style=\"font-size: 12px\">Rune of the Foreseer's Contract</span></div></div></div>"}],"tags":[{"internal_name":"unique","name":"Standard","category":"Quality","color":"D2D2D2","category_name":"Качество"},{"internal_name":"Rarity_Arcana","name":"Arcana","category":"Rarity","color":"ADE55C","category_name":"Редкость"},{"internal_name":"wearable","name":"Украшение","category":"Type","category_name":"Тип"},{"internal_name":"weapon","name":"Оружие","category":"Slot","category_name":"Ячейка"},{"internal_name":"npc_dota_hero_phantom_assassin","name":"Phantom Assassin","category":"Hero","category_name":"Герой"}],"hash":"5d406d388f3150999fa7bb0f424a2fa0"}}]}
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
04.03.2019, 18:57
Лучший ответ Сообщение было отмечено KOD_BILL как решение

Решение

Цитата Сообщение от KOD_BILL Посмотреть сообщение
Запросил данные по "644964380_2968685521,644964380_94931591 2,644964380_1340700956,644964380-2254805347"
И всё прекрасно парсится...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
using System;
using System.Net;
using System.Collections.Specialized;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
using System.IO;
 
namespace ConsoleApplication
{
    class Program
    {
        public static void Main(string[] args)
        {
            string info = "key";
            string url = "https://market.dota2.net/api/MassInfo/2/0/0/3?key=" + info + "";
            using (var webClient = new WebClient())
            {
                var pars = new NameValueCollection();
                pars.Add("list", "644964380_2968685521,644964380_949315912");
 
                var response = webClient.UploadValues(url, pars);
                string str = System.Text.Encoding.UTF8.GetString(response);
                //Console.WriteLine(str);
                //Console.ReadKey();
 
                //GetResult(str);
                GetResult(File.ReadAllText("test2.json"));
            }
        }
 
        public static void GetResult(string json)
        {
            var jsonApi = JsonConvert.DeserializeObject<RootObject>(json);
            if (jsonApi.success)
            {
                var results = jsonApi.results;
                foreach (var item in results)
                {
                    //var desc = item.info.description;
                    //foreach (var d in desc)
                    //    Console.WriteLine($"{d.type}-{d.value}-{d.color}");
 
                    Console.WriteLine($"{item.classid}_{item.instanceid}");
 
                    var desc3 = item.info.description[3];
                    Console.WriteLine($"{desc3.type} {desc3.value} {desc3.color}");
                    var desc4 = item.info.description[4];
                    Console.WriteLine($"{desc4.type} {desc4.value} {desc4.color}");
                    var desc5 = item.info.description[5];
                    Console.WriteLine($"{desc5.type} {desc5.value} {desc5.color}");
 
                    Console.WriteLine();
                }
            }
            else
            {
                Console.WriteLine("api error!");
            }
            Console.ReadKey();
        }
 
        public class Description
        {
            public string type { get; set; }
            public string value { get; set; }
            public string color { get; set; }
        }
 
        public class Tag
        {
            public string category { get; set; }
            public string internal_name { get; set; }
            public string localized_category_name { get; set; }
            public string localized_tag_name { get; set; }
            public string color { get; set; }
            public string category_name { get; set; }
            public string name { get; set; }
        }
 
        public class Info
        {
            public object our_market_instanceid { get; set; }
            public string market_name { get; set; }
            public string name { get; set; }
            public string market_hash_name { get; set; }
            public string rarity { get; set; }
            public string quality { get; set; }
            public string type { get; set; }
            public string mtype { get; set; }
            public string slot { get; set; }
            public string image { get; set; }
            public List<Description> description { get; set; }
            public List<Tag> tags { get; set; }
            public string hash { get; set; }
        }
 
        public class Result
        {
            public string classid { get; set; }
            public string instanceid { get; set; }
            public object sell_offers { get; set; }
            public object buy_offers { get; set; }
            public object history { get; set; }
            public Info info { get; set; }
        }
 
        public class RootObject
        {
            public bool success { get; set; }
            public List<Result> results { get; set; }
        }
    }
}
Миниатюры
Пасриснг json много уровненных массивов  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.03.2019, 18:57
Помогаю со студенческими работами здесь

Нужно через for создать много массивов
массив вида $contacts=array( array( 'name'=&gt;'Roman Feygenberg', #Имя контакта ...

Сформировать json объект из массивов
как загнать данные из базы в json объект. &lt;?php { $res_op = mysql_fetch_array($result_op); $address=$res_op;...

Сериализация массива массивов через Json
Здравствуйте. Возникла необходимость сериализовать массив типа string. Сейчас пользуюсь стандартной сериализацией через JsonUtility....

Парсинг JSON + группировка массивов - PHP Сети
Здравствуйте, уважаемые форумчане. Давно не заходил сюда и не обращался за помощью, но пришла пора. Итак, я получаю некие репорты в...

JSON, длина массивов в массиве равна одному - почему?
Всем привет! Почему длина boost равна 1, когда в нём 2 массива? Вывожу boost и вижу, что они объединены в одно целое (через запятую). Делал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru