【发布时间】:2021-02-11 21:44:35
【问题描述】:
我正在查询一个 mySQL (MariaDB) 数据库并使用 JSON_ARRAY 和 JSON_OBJECT 将 json 对象收集为数组。
我有一个 API 可以使用 GetAsync 从数据库中检索数据。
之后,在api消费者中,我想将Json解析成一个对象, 使用 JArray (Newtonsoft)。
由于 JSON_OBJECT 中的问题,我无法解析 Json(这似乎是包含数组符号“[”的引号)。请参阅下面的错误代码。
我做错了什么,我该如何解决?
当从另一个数据源(不使用 JSON_ARRAY 和 JSON_OBJECT)获取另一个 Json 时,解析正在工作(参见下面的示例)
这是我的代码:
public JARrray parse(HttpResponseMessage response)
{
return JArray.Parse(response.Content.ReadAsStringAsync().Result);
}
这是有效的字符串:
[
{
"remark":"",
"driver": [
{
"username":"0000000",
"uid":"00000000",
"fname": "000000",
"lname": ""
}
]
}
]
这是获取消息的字符串
解析一个值后,遇到了一个意外字符:u。路径'[0].driver',行..."
我可以在堆栈中看到在线上正在发生这种情况:
JsonTextReader.ParsePostValue(Boolean ignoreComments):
json:
[
{
"remark":"",
"driver": "[{\"username\": \"0000000\", \"uid\": \"00000000\", \"fname\":\"ZZZZZ\", \"lname\":\"\"}]"
}
]
甚至,当我删除“”时:
[
{
"remark":"",
"driver": "[{"username": "0000000", "uid": "00000000", "fname":"ZZZZZ", "lname":""}]"
}
]
【问题讨论】:
-
您说您正在从数据库中获取数据,但在您的解析方法中您使用的是
HttpResponseMessage。同样在您的第一个 json 结构中,driver是一个数组,而在您的第二个块中,它是一个包含 json 编码数组的字符串。 -
@derpirscher - 我有一个 API 创建器,它生成一个 api,我得到一个字符串的响应(与其他数据源一起使用)。至于您对包含 json 编码数组的驱动程序字符串的评论-您是对的!我该如何管理\修复它?
-
解决此问题的唯一正确方法是在数据库中正确存储和检索数据,并在您的 API 创建器中正确处理。