我有一个返回JSON的网络电话。
响应调用可以是数组也可以是对象。
我想验证响应是否是数组。
我正在使用JSON.NET。
这是我的架构:
string planElevationListSchema = @"{
'description': 'Plan elevation object array',
'type': 'array',
'items': {
'type': 'object',
'properties': {
'COMMUNITYNUMBER': { 'type': 'string' },
'PLANNUMBER': { 'type': 'string' },
'ELEVATION': { 'type': 'string' }
}
}
}";
这是我的代码:
JsonSchema schema = JsonSchema.Parse(planElevationListSchema);
JArray planElevationList = JArray.Parse(responseFromServer.ToString());
bool isValid = planElevationList.IsValid(schema);
如果返回JSON对象,我会得到一个
"从JsonReader读取JArray时出错。当前的JsonReader项目不是 一个数组:StartObject。路径'',第1行,第1位。"
我是否需要将我的代码包装在try / catch中或为该对象创建另一个模式?
无论我用什么来解析响应都会引发异常。
如何处理?
加 这是返回的对象的样子:
" {\"错误\":\" 44003150099没有有效计划/提升\" }"
这是返回的有效对象数组:
" [{\" COMMUNITYNUMBER \":\" 44002050000 \" \" PLANNUMBER \":\" 1700 \" \"立面图\":\" A \"},{\" COMMUNITYNUMBER \":\" 44002050000 \" \" PLANNUMBER \":\" 1700 \" \"立面图\":\"乙\ "},{\" COMMUNITYNUMBER \":\" 44002050000 \" \" PLANNUMBER \":\" 1700 \ " \"立面图\":\" C ^ \"},{\" COMMUNITYNUMBER \":\" 44002050000 \ " \" PLANNUMBER \":\" 1700 \" \"立面图\":\" d \&# 34;},{\" COMMUNITYNUMBER \":\" 44002050000 \" \" PLANNUMBER \":\" 1800 \&# 34; \"立面图\":\" A \"},{\" COMMUNITYNUMBER \":\" 44002050000 \&# 34; \" PLANNUMBER \":\" 1800 \" \"立面图\":\"乙\" },{\" COMMUNITYNUMBER \":\" 44002050000 \" \" PLANNUMBER \":\" 1800 \" ,\"立面图\":\" C ^ \"},{\" COMMUNITYNUMBER \":\" 44002050000 \" ,\" PLANNUMBER \":\&#34 ; 1800 \" \"立面图\":\" d \"},{\" COMMUNITYNUMBER \":\&#34 ; 44002050000 \" \" PLANNUMBER \":\" 1890 \" \"立面图\":\" A \"},{\" COMMUNITYNUMBER \":\" 44002050000 \" \" PLANNUMBER \":\" 1890年\" \"立面图\":\"乙\"},{\" COMMUNITYNUMBER \":\" 44002050000 \" \" PLANNUMBER \":\" 1890 \" \"立面图\":\" C ^ \& #34;},{\" COMMUNITYNUMBER \":\" 44002050000 \" \" PLANNUMBER \":\" 1890 \& #34; \"立面图\":\" d \"},{\" COMMUNITYNUMBER \":\" 44002050000 \& #34; \" PLANNUMBER \":\" 2270 \" \"立面图\":\" A \&#34 ;},{\" COMMUNITYNUMBER \":\" 44002050000 \" \" PLANNUMBER \":\" 2270 \&#34 ; \"立面图\":\"乙\"},{\" COMMUNITYNUMBER \":\" 44002050000 \&#34 ; \" PLANNUMBER \":\" 2270 \" \"立面图\":\" C ^ \"} {\" COMMUNITYNUMBER \":\" 440020 50000 \" \" PLANNUMBER \":\" 2270 \" \"立面图\":\" d \ "},{\" COMMUNITYNUMBER \":\" 44002050000 \" \" PLANNUMBER \":\" 2440 \ " \"立面图\":\" A \"},{\" COMMUNITYNUMBER \":\" 44002050000 \ " \" PLANNUMBER \":\" 2440 \" \"立面图\":\"乙\&# 34;},{\" COMMUNITYNUMBER \":\" 44002050000 \" \" PLANNUMBER \":\" 2440 \&# 34; \"立面图\":\" C ^ \"},{\" COMMUNITYNUMBER \":\" 44002050000 \&# 34; \" PLANNUMBER \":\" 2440 \" \"立面图\":\" d \" }]"
答案 0 :(得分:0)
您可以使用JToken.Parse()
来解析任何格式正确的JSON:
willPresent
您还可以检查实际的JToken.Type
以进行后续处理,例如:
var schema = JsonSchema.Parse(planElevationListSchema);
var planElevations = JToken.Parse(responseFromServer.ToString());
var isValid = planElevations.IsValid(schema);
示例工作.Net fiddle。另请参阅 JSON.NET: Why Use JToken--ever? ,其中介绍了可能希望使用抽象基类JToken
的其他情况。
答案 1 :(得分:-1)
更改'到"。见下文:
{
"description": "Plan elevation object array",
"type": "array",
"items": {
"type": "object",
"properties": {
"COMMUNITYNUMBER": {
"type": "string"
},
"PLANNUMBER": {
"type": "string"
},
"ELEVATION": {
"type": "string"
}
}
}
}