Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在处理之前替换JSON中的-INF_C#_Json_Json.net - Fatal编程技术网

C# 在处理之前替换JSON中的-INF

C# 在处理之前替换JSON中的-INF,c#,json,json.net,C#,Json,Json.net,我有一个JSON文件,其中的数据类型为整数、数组、字符串等…当我的一个有效JSON的数组属性包含如下数据时,在C中读取文件时会发生问题:“power”:[-INF,-INF,6,-8.98] 现在我知道,现代JSON解析器不支持-INF值,这就是发生此错误的原因。因此,一种解决方法是将数据文件中的-INF替换为类似“-Infinity”的内容。 有人能帮我优化代码吗?在进行任何进一步转换之前,我读取文件并替换-INF,而不破坏JSON文件中的任何其他内容 我的JSON文件示例 { "

我有一个JSON文件,其中的数据类型为整数、数组、字符串等…当我的一个有效JSON的数组属性包含如下数据时,在C中读取文件时会发生问题:
“power”:[-INF,-INF,6,-8.98]

现在我知道,现代JSON解析器不支持-INF值,这就是发生此错误的原因。因此,一种解决方法是将数据文件中的-INF替换为类似“-Infinity”的内容。
有人能帮我优化代码吗?在进行任何进一步转换之前,我读取文件并替换-INF,而不破坏JSON文件中的任何其他内容

我的JSON文件示例

{
  "AppVersion":"testb0d",
  "Bin":"P",
  "FailCounts":[-INF,-INF,-INF,-INF,3.223622,-3.111,12,0,0]
}

从技术上讲,这只是一个小小的吹毛求疵:“我有一个.jsonl文件(即每一行都有一个有效的json)…”因为json标准不允许使用
-INF
。因此,实际上,您正在询问如何将“看起来像JSON但不是”的内容转换为有效的JSON

话虽如此,您基本上希望将所有
-INF
替换为有效的JSON值(例如
0
“-INF”
)。您需要忽略引号中的
-INF
,因为它可能(有效地)出现在字符串或成员名称中

不幸的是,JSON允许使用转义引号(
\“
),这使得事情变得更加复杂。令人惊讶的是,我在这里没有找到一个现成的实现,(a)仅当文本出现在双引号之外时才替换它,(b)可以处理C样式的转义引号。但是,这种解析器的实现应该相当简单,我将给您一些伪代码来帮助您开始:

insideQuotes=false
循环通过字符:
如果char='\':
跳过下一个字符//这是忽略转义引号所必需的
否则,如果char=“”:
切换内部Equotes
否则,如果不在eQuotes内,则接下来的4个字符为“-INF”:
替换它们

您不应该修复生成
-INF
的代码吗?JSON标准明确禁止依赖于实现的概念,如无穷大:
不允许在下面的语法中表示数值(如无穷大和NaN)。
。此外,
-INF
对于所谓的
故障计数
的想法本身是错误的,可能是由于不正确的零除。如果缺少一个值,请使用
NULL
“我有一个.jsonl文件(即每一行都有一个有效的json)。所以,实际上,您正在询问如何将“看起来像JSON但不是”的内容转换为有效的JSON。它不是有效的JSON,不是因为每行有一个文档。它无效,因为它包含无效字符串,如
-INF
。为了流媒体的目的,每行存储一个文档是一种非常常见且古老的做法,以至于人们试图通过将自己的名字粘在文档上来劫持这种常见做法。没有
jsonl
,没有
ndjson
,没有
jsonline
标准或格式。所有这些都是指人们已经做了很长一段时间的事情——每个存储一个未插入的json文档line@Panagiotis不能改变来源,它现在还不可能(我们已经讨论过这个选项)不要继续失败计数和其他术语,我只是想给出一个数据的概念,它是什么样子的。如果我对Jsonl文件的每一行进行循环,就会得到一个有效的json,我可以使用newtonsoft解析它。假设我有一个带有-INF数据的有效Json文件,请不要坚持无效的
-INF
值在任何方面都是有效的。这就是阻止你解决这个问题的原因。因为它是无效的,所以不能使用任何现成的解析器。您必须为该属性编写自己的自定义转换器并应用它。您没有发布代码、类或解释您使用JSON.NET,否则人们可能已经建议了该解决方案