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

  • Автор темы Автор темы Dmitriy Ka
  • Дата начала Дата начала

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
951
Реакции
737
Баллы
93
Не могу распарсить 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#:
Развернуть Свернуть Копировать
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
Не могу распарсить 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
}
 
Не могу распарсить 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
Спасибо за варианты, но додумался до своего.
Сделал отдельный класс с нужными полями из 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
 
Последнее редактирование:

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