我有一个JSON文件,其中的数据类型为整数、数组、字符串等…当我的一个有效JSON的数组属性具有类似"power":[-INF, -INF, 6,-8.98]
的数据时,在C#中读取文件时会发生问题。
现在我知道了,现代JSON解析器不支持-INF值,这就是出现此错误的原因。因此,一种解决方法是将我的数据文件中的-INF替换为类似于"-无限">
有人能帮我优化代码吗?在进行任何进一步转换之前,我可以在不破坏JSON文件中任何其他内容的情况下读取文件并替换-INF。
我的JSON文件示例
{
"AppVersion":"testb0d",
"Bin":"P",
"FailCounts":[-INF,-INF,-INF,-INF,3.223622,-3.111,12,0,0]
}
先挑一个小毛病:"我有一个.jsonl文件(即每行都有一个有效的json(">从技术上讲,它不是有效的json,因为json标准不允许-INF
。所以,实际上,你在问如何转换";看起来像JSON,但不是"JSON";转换为有效的JSON。
如上所述,您基本上希望用一个有效的JSON值(例如0
或"-INF"
(替换所有-INF
。您需要忽略引号中的-INF
,因为它可能(有效地(出现在字符串或成员名称中。
不幸的是,JSON允许转义引号("
(,这使得事情变得更加复杂。令人惊讶的是,我在SO上没有找到现成的实现,它(a(只有在文本出现在双引号之外时才替换文本,(b(可以处理C风格的转义引号。然而,这样一个解析器的实现应该相当简单,我会给你一些伪代码来帮助你开始:
insideQuotes = false
loop through chars:
if char = '':
skip next char // this is necessary to ignore escaped quotes
else if char = '"':
toggle insideQuotes
else if not insideQuotes and the next 4 chars are "-INF":
replace them