我想解析IEX Cloud股票报价查询:https://cloud.iexapis.com/stable/stock/aapl/quote?token=YOUR_TOKEN_HERE
的JSON输出我已经厌倦了使用Regex101解决此问题: https://regex101.com/r/y8i01T/1/
这是我尝试过的正则表达式:"([^"]+)":"?([^",\s]+)
以下是苹果的IEX Cloud股票报价输出示例:
{
"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
没有逗号,需要加以说明。
答案 0 :(得分:-1)
您很可能不需要使用正则表达式解析数据。但是,如果您希望/必须这样做(也许是为了练习正则表达式),则可以通过在表达式中定义一些边界来实现。
This RegEx可能会帮助您做到这一点,它将输入的JSON值分为字符串,数字和最后一个非逗号值三类:
"([^"]+)":("(.+)"|(.+))(,{1}|\n\})
然后,可以将 \ n} 边界用作最后一个值,将“” 边界用作字符串值,而没有边界用于数字值。