Подскажите как распарсить через метод JObject.Parse()

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
733
Благодарностей
485
Баллы
63
Не могу распарсить Json, есть динамический параметр, который мне не нужен, но который мешает парсть Json
C#:
{
 "status": "yes",
 "user_id": "1",
 "balance": "48.80",
 "currency": "RUB",
 "list_count": 4,
 "list": {
   "11": {
      "id": "11",
      "ip": "2a00:1838:32:19f:45fb:2640::330",
      "host": "185.22.134.250",
      "port": "7330",
      "user": "5svBNZ",
      "pass": "iagn2d",
      "type": "http",
      "country": "ru",
      "date": "2016-06-19 16:32:39",
      "date_end": "2016-07-12 11:50:41",
      "unixtime": 1466379159,
      "unixtime_end": 1468349441,
      "descr": "",
      "active": "1"
   },
   "14": {
      "id": "14",
      "ip": "2a00:1838:32:198:56ec:2696::386",
      "host": "185.22.134.242",
      "port": "7386",
      "user": "nV5TFK",
      "pass": "3Itr1t",
      "type": "http",
      "country": "ru",
      "date": "2016-06-27 16:06:22",
      "date_end": "2016-07-11 16:06:22",
      "unixtime": 1466379159,
      "unixtime_end": 1468349441,
      "descr": "",
      "active": "1"
   }
 }
}

Нужно вытащить данные проксей, но мешает ID прокси который идет после list, как ее обойти?

Я получаю список данных проксей
C#:
 var proxyList = JObject.Parse(proxyJson)["list"].ToList();
C#:
"11": {
  "id": "11",
  "ip": "2a00:1838:32:19f:45fb:2640::330",
  "host": "185.22.134.250",
  "port": "7330",
  "user": "5svBNZ",
  "pass": "iagn2d",
  "type": "http",
  "country": "ru",
  "date": "2016-06-19 16:32:39",
  "date_end": "2016-07-12 11:50:41",
  "unixtime": 1466379159,
  "unixtime_end": 1468349441,
  "descr": "",
  "active": "1"
}
"11": Мешает дальше парсить, она динамическая, как ее обойти?
 

n0n3mi1y

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

C#:
public partial class ProxyData
    {
        [JsonProperty("status")]
        public string Status { get; set; }

        [JsonProperty("user_id")]
        [JsonConverter(typeof(ParseStringConverter))]
        public long UserId { get; set; }

        [JsonProperty("balance")]
        public string Balance { get; set; }

        [JsonProperty("currency")]
        public string Currency { get; set; }

        [JsonProperty("list_count")]
        public long ListCount { get; set; }

        [JsonProperty("list")]
        public Dictionary<string, List> List { get; set; }
    }

    public partial class List
    {
        [JsonProperty("id")]
        [JsonConverter(typeof(ParseStringConverter))]
        public long Id { get; set; }

        [JsonProperty("ip")]
        public string Ip { get; set; }

        [JsonProperty("host")]
        public string Host { get; set; }

        [JsonProperty("port")]
        [JsonConverter(typeof(ParseStringConverter))]
        public long Port { get; set; }

        [JsonProperty("user")]
        public string User { get; set; }

        [JsonProperty("pass")]
        public string Pass { get; set; }

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

        [JsonProperty("country")]
        public string Country { get; set; }

        [JsonProperty("date")]
        public DateTimeOffset Date { get; set; }

        [JsonProperty("date_end")]
        public DateTimeOffset DateEnd { get; set; }

        [JsonProperty("unixtime")]
        public long Unixtime { get; set; }

        [JsonProperty("unixtime_end")]
        public long UnixtimeEnd { get; set; }

        [JsonProperty("descr")]
        public string Descr { get; set; }

        [JsonProperty("active")]
        [JsonConverter(typeof(ParseStringConverter))]
        public long Active { get; set; }
    }


C#:
using Global.ZennoLab.Json;
using Global.ZennoLab.Json.Linq;
using Global.ZennoLab.Json.Converters;
using System;
using System.Collections.Generic;
using System.Globalization;
 
  • Спасибо
Реакции: Dmitriy Ka

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Не могу распарсить Json, есть динамический параметр, который мне не нужен, но который мешает парсть Json
C#:
{
"status": "yes",
"user_id": "1",
"balance": "48.80",
"currency": "RUB",
"list_count": 4,
"list": {
   "11": {
      "id": "11",
      "ip": "2a00:1838:32:19f:45fb:2640::330",
      "host": "185.22.134.250",
      "port": "7330",
      "user": "5svBNZ",
      "pass": "iagn2d",
      "type": "http",
      "country": "ru",
      "date": "2016-06-19 16:32:39",
      "date_end": "2016-07-12 11:50:41",
      "unixtime": 1466379159,
      "unixtime_end": 1468349441,
      "descr": "",
      "active": "1"
   },
   "14": {
      "id": "14",
      "ip": "2a00:1838:32:198:56ec:2696::386",
      "host": "185.22.134.242",
      "port": "7386",
      "user": "nV5TFK",
      "pass": "3Itr1t",
      "type": "http",
      "country": "ru",
      "date": "2016-06-27 16:06:22",
      "date_end": "2016-07-11 16:06:22",
      "unixtime": 1466379159,
      "unixtime_end": 1468349441,
      "descr": "",
      "active": "1"
   }
}
}

Нужно вытащить данные проксей, но мешает ID прокси который идет после list, как ее обойти?

Я получаю список данных проксей
C#:
 var proxyList = JObject.Parse(proxyJson)["list"].ToList();
C#:
"11": {
  "id": "11",
  "ip": "2a00:1838:32:19f:45fb:2640::330",
  "host": "185.22.134.250",
  "port": "7330",
  "user": "5svBNZ",
  "pass": "iagn2d",
  "type": "http",
  "country": "ru",
  "date": "2016-06-19 16:32:39",
  "date_end": "2016-07-12 11:50:41",
  "unixtime": 1466379159,
  "unixtime_end": 1468349441,
  "descr": "",
  "active": "1"
}
"11": Мешает дальше парсить, она динамическая, как ее обойти?
107540

C#:
// добавляем в using
// using Global.ZennoLab.Json;
// using Global.ZennoLab.Json.Linq;


string json = project.Variables["json"].Value;
var obj = JObject.Parse(json);
var listObj = (JObject)obj["list"];
var dics = listObj.Properties()
    .Select(p => p.Value.ToObject<Dictionary<string, object>>())
    .ToList();
    
// тут уже перебираем результат     
foreach(var dic in dics) {
    string line = JsonConvert.SerializeObject(dic,  Formatting.Indented);
    project.SendInfoToLog(line); // line - содержит объект в строке json
}
 

b1zar

Client
Регистрация
29.06.2019
Сообщения
107
Благодарностей
67
Баллы
28
Не могу распарсить Json, есть динамический параметр, который мне не нужен, но который мешает парсть Json
C#:
{
"status": "yes",
"user_id": "1",
"balance": "48.80",
"currency": "RUB",
"list_count": 4,
"list": {
   "11": {
      "id": "11",
      "ip": "2a00:1838:32:19f:45fb:2640::330",
      "host": "185.22.134.250",
      "port": "7330",
      "user": "5svBNZ",
      "pass": "iagn2d",
      "type": "http",
      "country": "ru",
      "date": "2016-06-19 16:32:39",
      "date_end": "2016-07-12 11:50:41",
      "unixtime": 1466379159,
      "unixtime_end": 1468349441,
      "descr": "",
      "active": "1"
   },
   "14": {
      "id": "14",
      "ip": "2a00:1838:32:198:56ec:2696::386",
      "host": "185.22.134.242",
      "port": "7386",
      "user": "nV5TFK",
      "pass": "3Itr1t",
      "type": "http",
      "country": "ru",
      "date": "2016-06-27 16:06:22",
      "date_end": "2016-07-11 16:06:22",
      "unixtime": 1466379159,
      "unixtime_end": 1468349441,
      "descr": "",
      "active": "1"
   }
}
}

Нужно вытащить данные проксей, но мешает ID прокси который идет после list, как ее обойти?

Я получаю список данных проксей
C#:
 var proxyList = JObject.Parse(proxyJson)["list"].ToList();
C#:
"11": {
  "id": "11",
  "ip": "2a00:1838:32:19f:45fb:2640::330",
  "host": "185.22.134.250",
  "port": "7330",
  "user": "5svBNZ",
  "pass": "iagn2d",
  "type": "http",
  "country": "ru",
  "date": "2016-06-19 16:32:39",
  "date_end": "2016-07-12 11:50:41",
  "unixtime": 1466379159,
  "unixtime_end": 1468349441,
  "descr": "",
  "active": "1"
}
"11": Мешает дальше парсить, она динамическая, как ее обойти?
C#:
Newtonsoft.Json.Linq.JObject json = Newtonsoft.Json.Linq.JObject.Parse(project.Variables["ТвойJSON"].Value);

List<Newtonsoft.Json.Linq.JToken> ProxyList = json.SelectTokens(@"$...ip").ToList();


foreach (string proxyTemp in ProxyList){
    string proxy = proxyTemp;
    project.SendInfoToLog(proxy, true);
}

return ProxyList[0];
URL DLL
 
  • Спасибо
Реакции: Dmitriy Ka

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
733
Благодарностей
485
Баллы
63
Спасибо за варианты, но додумался до своего.
Сделал отдельный класс с нужными полями из Json, получился крутой вариант для расширения или удаления нужных данных:-)
C#:
public class JsonProxy6
{
    public string Id { get; set; }
    public string Host { get; set; }
    public string Port { get; set; }
    public string User { get; set; }
    public string Pass { get; set; }
    public string Country { get; set; }
    public string Date_end { get; set; }
    public string Unixtime_end { get; set; }
    public string Descr { get; set; }
    public string Active { get; set; }
}
В доке по Newtonsoft нашел такую реализацию https://www.newtonsoft.com/json/help/html/SerializingJSONFragments.htm#!

Реализовал такой код
C#:
public override List<JsonProxy6> Parse(string proxyJson) //override для работы абстрактного метода, если работаете с простым методом, то удалите!
{
    var objProxy = JObject.Parse(proxyJson);
    IList<JToken> results = objProxy.SelectTokens("list").Children().Children().ToList(); //.Children().Children() обходим пративный Id который все портил

    var proxyList = new List<JsonProxy6>();
    foreach (var result in results)
    {
        JsonProxy6 jsonProxy6 = result.ToObject<JsonProxy6>();
        proxyList.Add(jsonProxy6);
    }

    return proxyList;
}
Результат
107594
 
Последнее редактирование:

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