json - 使用正则表达式解析 JSON 请求
问题描述
我想解析来自 IEX Cloud 股票报价查询的 JSON 输出:https ://cloud.iexapis.com/stable/stock/aapl/quote?token=YOUR_TOKEN_HERE
我已经厌倦了使用 Regex101 来解决问题: https ://regex101.com/r/y8i01T/1/
这是我尝试过的正则表达式:"([^"]+)":"?([^",\s]+)
以下是 Apple 的 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
没有逗号,需要说明。
解决方案
您很可能不需要使用正则表达式解析您的数据。但是,如果您希望/必须这样做,也许是为了练习正则表达式,您可以通过在表达式中定义一些边界来做到这一点。
此 RegEx可能会帮助您做到这一点,它将您的输入 JSON 值分为三类字符串、数字和最后一个无逗号值:
"([^"]+)":("(.+)"|(.+))(,{1}|\n\})
然后,您可以将\n}边界用于最后一个值,""将边界用于字符串值,而将无边界用于数值。
推荐阅读
- android - InvalidPluginRequestException Gradle AndroidStudio
- arrays - 控制台返回整个数组,但当我想要它的第一个元素时返回“未定义”
- windows - 在windows中如何创建一个快捷方式使系统关机或休眠?
- arrays - 在字典中组合(所有单独的)数组元素
- javascript - 类型ORM关系和表达
- python-3.x - 在 Python 错误中通过 Instagram Graph api 发表评论
- java - What should I set JAVA_HOME to using multiple jdks?
- mysql - 通过不按我的意愿工作来续集聚合组
- javascript - Javascript 待办事项列表应用程序。我无法删除最后剩余的 li 并清除所有按钮不起作用,只有本地存储被删除
- clickhouse - clickhouse create table 异常:在查询中发现聚合函数 minState(origin_user) 在错误的位置