c# - 验证具有空对象的 JsonArray 的 json
问题描述
我有一个经常监视 .json 文件结构的 Windows 服务,它一直正常工作,直到昨天我们的应用程序无法正确读取这个 .json 但被认为是有效的!:
{
"infohead": {
"indicator": "12",
"istesting": "ABC_12_219",
"isdate": "2021-08-11 10:02:12"
},
"headers": {
"url": "https://www.blahblah.com/"
},
"advertisements": [,
{
"type": "arc",
"adType": "1",
"appn": {
"x": 1241,
"y": 1241,
"z": 1243,
}
},
{
"type": "arc2",
"adType": "1",
"appn": {
"x": 1441,
"y": 1441,
"z": 1443,
}
}
]
}
如果它在浏览器中加载,我会收到错误消息:
SyntaxError:JSON.parse:JSON 数据第 10 行第 21 列的意外字符
C# 以某种方式检测到这是正确的,数组“advertisements”具有三个对象,一个具有空值,另一个具有值。
"advertisements": [,
{
"type": "arc",
"adType": "1",
"appn": {
"x": 1241,
"y": 1241,
"z": 1243,
}
},
{
"type": "arc2",
"adType": "1",
"appn": {
"x": 1441,
"y": 1441,
"z": 1443,
}
}
]
我也使用了这个问题中描述的方法,
我不想使用 JSON 模式(验证 Json 模式 C#)进行验证,还有另一种执行验证的解决方案吗?
解决方案
我尝试了建议的解决方案,甚至尝试使用 REGEX 也没有成功,实际上我发现了一些有趣的东西,例如,如果我尝试反序列化“json”的内容,则使用此方法:
WebClient client = new WebClient();
string jsonContent= client.DownloadString(jsonFile);
dynamic myJson = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonContent);
我没有例外,内容将“未定义”值显示为 JsonArray 内的对象:
"advertisements": [undefined,
{
"type": "arc",
"adType": "1",
"appn": {
"x": 1241,
"y": 1241,
"z": 1243,
}
},
{
"type": "arc2",
"adType": "1",
"appn": {
"x": 1441,
"y": 1441,
"z": 1443,
}
}
]
所以现在我的“解决方案”正在使用JToken.Parse(...)
并在内容中查找“未定义”字符串:-(。
WebClient client = new WebClient();
string myJSON = client.DownloadString(jsonFile);
var obj = JToken.Parse(myJSON);
if (obj.ToString().Contains("undefined")) //Check for "undefined" values.
{
//Json content not valid for processing.
}
else
{
//Json content is valid!
}
推荐阅读
- php - PHP 回声 $foo ?没有虚假部分的“酒吧”?
- python - 如何在我使用函数时结束我的代码?
- laravel - Laravel 迁移,其中 id 列未命名为“id”导致错误
- python - 如何在不使用显式参数值的情况下用 numpy 重塑矩阵?
- javascript - 在 Fluen UI react 中选中切换按钮时如何更新下拉列表的项目?
- java - Java JVM有没有办法检索一个类的所有实例
- reactjs - 尝试导入错误:“Switch”未从“react-router-dom”导出。这个错误的原因是什么?
- docker-compose - 在 docker-compose 下运行时如何让 Dapr Service to Service Invocation 工作?
- java - 继续接受来自控制台的输入,直到用户中断
- windows-10 - The PowerShell code works when run from the PowerShell command prompt but not when run with double-click or turned into an executable