Как найти конкретный элемент JSON из файла TXT в C #, используя xpath / jsonpath? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть много данных формата JSON в текстовом файле, и формат выглядит так:

[{"ev":"AM","sym":"TMHC","v":1000,"av":74917,"op":18.92,"vw":19.1305,"o":19.13,"c":19.15,"h":19.15,"l":19.13,"a":19.143,"z":90,"n":1,"s":1549380300000,"e":1549380360000},{"ev":"AM","sym":"SPYG","v":7103,"av":184266,"op":35.27,"vw":35.3148,"o":35.3264,"c":35.34,"h":35.34,"l":35.3258,"a":35.3345,"z":710,"n":1,"s":1549380300000,"e":1549380360000},
{"ev":"AM","sym":"AAPL","v":73,"av":1866,"op":35.27,"vw":35.3148,"o":35.3264,"c":35.34,"h":35.34,"l":35.3258,"a":35.3345,"z":710,"n":1,"s":1549380300000,"e":1549380360000}]

Поэтому мне нужно найти элемент json определенного символа.Например, если я использую AAPL, он дает нам все данные элемента AAPL из txt файла.Как

{"ev":"AM","sym":"AAPL","v":73,"av":1866,"op":35.27,"vw":35.3148,"o":35.3264,"c":35.34,"h":35.34,"l":35.3258,"a":35.3345,"z":710,"n":1,"s":1549380300000,"e":1549380360000}

Так, пожалуйста, вы можете помочь мне, как мне это сделать?

static void xPathUsing()
{
  const string filePath = @"D:\Aggregate_Minute_AAPL.txt";
  using (StreamReader r = new StreamReader(filePath))
  {
      string json = r.ReadToEnd();
  }
}

1 Ответ

0 голосов
/ 18 февраля 2019

Поскольку вам необходимо выполнить несколько операций с данными, лучшим способом будет считывание данных в память один раз (или снова при каждом изменении данных) и их хранение таким образом, который поддерживает быстрый запрос.Чтобы найти строку по символу, вы можете создать словарь, содержащий данные.

В следующих примерах для анализа JSON используется широко используемая библиотека JSON.NET .

Во-первых, вам нужно определить класс, который повторяет схему ваших объектов JSON, например:

class Row
{
    [JsonProperty("sym")]
    public string Symbol { get; set; }
    public decimal vw { get; set; }
    // ...
}

Обратите внимание, что вы можете использовать атрибут JsonProperty, чтобы иметь возможностьназначить свойствам класса имена, отличные от имен в JSON.

В следующем примере показано, как прочитать данные из файла и как преобразовать их в словарь:

var input = File.ReadAllText("C:\\Temp\\abc.json");
var rows = JsonConvert.DeserializeObject<IEnumerable<Row>>(input);
var dict = rows.ToDictionary(x => x.Symbol, x => x, StringComparer.OrdinalIgnoreCase);

После подготовки словаря один раз вы можете получить соответствующую строку с помощью индексатора:

var aaplRow = dict["AAPL"];
...