Разбор JSON-запроса с помощью REGEX - PullRequest
1 голос
/ 27 апреля 2019

Я бы хотел проанализировать вывод JSON из запроса котировки акций IEX Cloud: https://cloud.iexapis.com/stable/stock/aapl/quote?token=YOUR_TOKEN_HERE

Я устал использовать Regex101 для решения этой проблемы: https://regex101.com/r/y8i01T/1/

Вот выражение Regex, которое я пробовал: "([^"]+)":"?([^",\s]+)

Вот пример вывода котировок акций IEX Cloud для Apple:

{
     "symbol":"AAPL", 
     "companyName":"Apple, Inc.", 
     "calculationPrice":"close", 
     "open":204.86, 
     "openTime":1556285400914, 
     "close":204.3, 
     "closeTime":1556308800303, 
     "high":205, 
     "low":202.12, 
     "latestPrice":204.3, 
     "latestSource":"Close", 
     "latestTime":"April 26, 2019", 
     "latestUpdate":1556308800303, 
     "latestVolume":18604306, 
     "iexRealtimePrice":204.34, 
     "iexRealtimeSize":48, 
     "iexLastUpdated":1556308799763, 
     "delayedPrice":204.3, 
     "delayedPriceTime":1556308800303, 
     "extendedPrice":204.46, 
     "extendedChange":0.16, 
     "extendedChangePercent":0.00078, 
     "extendedPriceTime":1556310657637, 
     "previousClose":205.28, 
     "change":-0.98, 
     "changePercent":-0.00477, 
     "iexMarketPercent":0.030716437366704246, 
     "iexVolume":571458, 
     "avgTotalVolume":27717780, 
     "iexBidPrice":0, 
     "iexBidSize":0, 
     "iexAskPrice":0, 
     "iexAskSize":0, 
     "marketCap":963331704000, 
     "peRatio":16.65, 
     "week52High":233.47, 
     "week52Low":142, 
     "ytdChange":0.29512900000000003 
}

Я хочу сохранить пары ключ-значение в ответе JSON без кавычек вокруг ключа и собрать значение, начинающееся после двоеточия (:). Мне нужно исключить любые кавычки для текста, запятую в конце каждой строки и включить последнюю пару ключ-значение, которая не включает запятую в конце строки.

Например, "peRatio":16.65, должен иметь ключ, равный peRatio, и значение, равное 16.65. Или другой пример, "changePercent":-0.00477, должен иметь ключ, равный changePercent, и значение -0.00477. Если это текст, такой как "companyName":"Apple, Inc.",, он должен иметь ключ, равный companyName, и значение, равное Apple, Inc.

Кроме того, последняя запись значения ключа JSON: "ytdChange":0.29512900000000003 не имеет запятой и ее необходимо учитывать.

1 Ответ

0 голосов
/ 27 апреля 2019

Скорее всего, вам не нужно анализировать данные с помощью регулярных выражений. Однако, если вы хотите / должны сделать это, возможно, для отработки регулярных выражений, вы можете сделать это, определив несколько границ в своем выражении.

Этот RegEx может помочь вам сделать это, что разделит ваши входные значения JSON на три категории строковых, числовых и последних значений без запятых:

"([^"]+)":("(.+)"|(.+))(,{1}|\n\})

Затем вы можете использовать границу \ n} для последнего значения, границу "" для ваших строковых значений и отсутствие границы для числовых значений.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...